Difference between revisions of "Execute on USB insert (Italiano)"

From ArchWiki
Jump to: navigation, search
m
m (Jstjohn moved page Execute on usb insert (Italiano) to Execute on USB insert (Italiano) without leaving a redirect: 'usb' -> 'USB')
(9 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{i18n|Execute on usb insert}}
+
[[Category:Hardware detection and troubleshooting (Italiano)]]
{{translateme}}
+
[[en:Execute on USB insert]]
{{Nota|Questo articolo è in fase di traduzione. Seguite per ora le istruzioni della versione inglese.}}
+
Supponendo di voler eseguire un certo programma all’inserimento di una pennina USB.
 +
Personalmente, ho aggiunto questa caratteristica perché mi ero stufato dei blocchi del pc dove tastiera e mouse sono inservibili(ed anche le scorciatoie da tastiera non funzionano).
  
Suppose you want to execute a certain program on the insertion of a usb dongle.
+
Quindi ho aggiunto una misura di sicurezza, in modo che solo una chiavetta USB contenente la giusta chiave possa eseguire il programma.
Personally, I added this feature because I was getting frustrated with the computer locking up and all keyboard and mouse input was lost (The sysrq keys were not working).
+
  
There is an added security feature so that only dongles with the correct key can run the program.
+
== Installazione ==
 +
Mettere una copia dello [[#exdongle_script|script {{ic|exdongle}}]] (che trovate più in basso) nella cartella degli eseguibili(uno dei percorsi indicati nella variabile d’ambiente {{ic|$PATH}} comunemente è consigliato usare {{ic|/usr/bin/}}).
  
== Installation ==
+
Aggiungere la seguente linea alla [[Udev_(Italiano)#Mount_automatico_delle_periferiche_USB|regola di mount delle periferiche USB]]  (modificarla a seconda della propria configurazione):
  
Put a copy of the [[Execute_on_usb_insert#exdongle_script|{{Filename|exdongle}} script]] (given below) in your path.
+
ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"
  
Add the following line to your udev [[Udev#Auto_mounting_USB_devices|USB mount rule]] (Modify to fit your configuration):
+
Eseguire l’opzione di configurazione, per esempio
  
  ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"
+
exdongle conf -k "$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM" -p "-10" -s "on"
  
Run the configuration option, for example
+
Questo imposta la configurazione con chiavi casuali(solo con le chiavi giuste potranno essere eseguiti sul computer i programmi o gli script), e la priorità di esecuzione a -10
  
  exdongle conf -k "$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM" -p "-10" -s "on"
+
== Configurare una pennina USB ==
 +
Per prima cosa, scrivere lo script che verrà inserito all’inserimento della pennina.
  
This sets the configuration to a random key value (only programs with the correct keys can be run on the computer), and the runtime priority to -10.
+
Ad esempio:
  
== Setting up a USB dongle ==
+
{{hc|test.sh|2=<nowiki>
 
+
First, write a script that you want to run when the dongle is inserted.
+
 
+
For example:
+
 
+
{{File|name=test.sh|content=<nowiki>
+
 
#!/bin/sh
 
#!/bin/sh
  
Line 34: Line 30:
 
</nowiki>}}
 
</nowiki>}}
  
Now run the new option:
+
Adesso eseguire nuovamente {{ic|exdongle}} utilizzando l'opzione {{ic|new}}:
 
+
  exdongle new <Dongle mount point> test.sh
+
 
+
Now, whenever you insert the dongle, a root shell will be opened under the X server running on display :0.
+
This may be useful for some administrative purposes.
+
  
== Security ==
+
exdongle new <punto di mount della pennina USB> test.sh
  
There may be security issues with this, and it is probably best used only on a personal computer.
+
Ora, ogni volta che viene inserita la pennina, una finestra di terminale, lanciata dall’utente root verrà eseguita sul display {{ic|:0}}.
 +
Questo può essere utile per scopi amministrativi.
  
 +
== Sicurezza ==
 +
Questa procedura non garantisce la sicurezza del sistema, ed è quindi consigliato utilizzarla solo su pc domestici.
 
== exdongle script ==
 
== exdongle script ==
  
{{File|name=/usr/bin/exdongle|content=<nowiki>
+
{{hc|/usr/bin/exdongle|2=<nowiki>
 
#!/bin/sh
 
#!/bin/sh
  
Line 60: Line 54:
 
function usage() {
 
function usage() {
  
  echo ""
+
echo ""
  echo "USAGE: $0 new <DIR> <PROG>"
+
echo "USAGE: $0 new <DIR> <PROG>"
  echo "      $0 del <DIR>"
+
echo "      $0 del <DIR>"
  echo "      $0 conf [-k KEY] [-p PRIORITY] [-s SWITCH]"
+
echo "      $0 conf [-k KEY] [-p PRIORITY] [-s SWITCH]"
  echo "      $0 run <DIR>"
+
echo "      $0 run <DIR>"
  echo ""
+
echo ""
  echo "  new:"
+
echo "  new:"
  echo "    DIR <S>:    The directory on the dongle to execute"
+
echo "    DIR <S>:    The directory on the dongle to execute"
  echo "    SCRIPT <S>: The script to run on dongle"
+
echo "    SCRIPT <S>: The script to run on dongle"
  echo ""
+
echo ""
  echo "  del:"
+
echo "  del:"
  echo "    DIR [S]: The directory on the dongle to execute"
+
echo "    DIR [S]: The directory on the dongle to execute"
  echo ""
+
echo ""
  echo "  conf:"
+
echo "  conf:"
  echo "    -k <S>: specify key"
+
echo "    -k <S>: specify key"
  echo "    -p <N>: priority to run script at"
+
echo "    -p <N>: priority to run script at"
  echo "    -s <on|off>: Activate or deactivate exdongle"
+
echo "    -s <on|off>: Activate or deactivate exdongle"
  echo ""
+
echo ""
  echo "  run:"
+
echo "  run:"
  echo "    DIR <S>: Directory to find script in"
+
echo "    DIR <S>: Directory to find script in"
  echo ""
+
echo ""
  
  exit 0
+
exit 0
  
 
}
 
}
Line 90: Line 84:
 
function new() {
 
function new() {
  
  if [ ! "$#" -eq 3 ]; then
+
if [ ! "$#" -eq 3 ]; then
 
     usage $@;
 
     usage $@;
 
     exit 1;
 
     exit 1;
  fi
+
fi
  
  DIR="$2"
+
DIR="$2"
  PROG="$3"
+
PROG="$3"
  PLOC="$DIR/.$(hostname).$key"
+
PLOC="$DIR/.$(hostname).$key"
  
  rm "$PLOC" &> /dev/null
+
rm "$PLOC" &> /dev/null
  cp "$PROG" "$PLOC"
+
cp "$PROG" "$PLOC"
  
  exit 0
+
exit 0
  
 
}
 
}
Line 110: Line 104:
 
function del() {
 
function del() {
  
  DIR="$2"
+
DIR="$2"
  PLOC="$DIR/.$(hostname).$key"
+
PLOC="$DIR/.$(hostname).$key"
  
  if [ -e "$PLOC" ]; then
+
if [ -e "$PLOC" ]; then
 
     rm -f "$PLOC"
 
     rm -f "$PLOC"
  fi
+
fi
  
  exit 0
+
exit 0
  
 
}
 
}
Line 125: Line 119:
 
function conf() {
 
function conf() {
  
  shift
+
shift
  while getopts "k:p:s:" optname; do
+
while getopts "k:p:s:" optname; do
 
     case "$optname" in
 
     case "$optname" in
      k)
+
    k)
        key="$OPTARG"
+
      key="$OPTARG"
        ;;
+
      ;;
      p)
+
    p)
        priority="$OPTARG"
+
      priority="$OPTARG"
        ;;
+
      ;;
      s)
+
    s)
        if [ "$OPTARG" = "on" ] || [ "$OPTARG" = "off" ]; then
+
      if [ "$OPTARG" = "on" ] || [ "$OPTARG" = "off" ]; then
          switch="$OPTARG"
+
        switch="$OPTARG"
        fi
+
      fi
        ;;
+
      ;;
 
     esac
 
     esac
  done
+
done
  
  echo "# exdongle configuration file" > "$CONFFILE"
+
echo "# exdongle configuration file" > "$CONFFILE"
  echo "key=\"$key\"" >> "$CONFFILE"
+
echo "key=\"$key\"" >> "$CONFFILE"
  echo "priority=\"$priority\"" >> "$CONFFILE"
+
echo "priority=\"$priority\"" >> "$CONFFILE"
  echo "switch=\"$switch\"" >> "$CONFFILE"
+
echo "switch=\"$switch\"" >> "$CONFFILE"
  
  chmod 0600 "$CONFFILE"
+
chmod 0600 "$CONFFILE"
  
  exit 0
+
exit 0
  
 
}
 
}
Line 157: Line 151:
 
function run() {
 
function run() {
  
  if [ ! "$switch" = "on" ]; then
+
if [ ! "$switch" = "on" ]; then
 
     exit 0
 
     exit 0
  fi
+
fi
  
  if [ ! "$#" -eq 2 ]; then
+
if [ ! "$#" -eq 2 ]; then
 
     usage $@
 
     usage $@
 
     exit 1
 
     exit 1
  fi
+
fi
  
  DIR="$2"
+
DIR="$2"
  PLOC="$DIR/.$(hostname).$key"
+
PLOC="$DIR/.$(hostname).$key"
  ELOC="/tmp/.exdongle.prog"
+
ELOC="/tmp/.exdongle.prog"
  
  if [ ! -e "$PLOC" ]; then
+
if [ ! -e "$PLOC" ]; then
 
     echo "No executable file found!" 1>&2
 
     echo "No executable file found!" 1>&2
 
     exit 0
 
     exit 0
  fi
+
fi
  
  rm -f "$ELOC"
+
rm -f "$ELOC"
  cp "$PLOC" "$ELOC"
+
cp "$PLOC" "$ELOC"
  chmod 0500 "$ELOC"
+
chmod 0500 "$ELOC"
  nice -n "$priority" $ELOC
+
nice -n "$priority" $ELOC
  rm -f "$ELOC"
+
rm -f "$ELOC"
  exit 0
+
exit 0
  
 
}
 
}
Line 187: Line 181:
  
 
if [ ! "$UID" == "0" ]; then
 
if [ ! "$UID" == "0" ]; then
  echo "You must be root to perform this operation" 1>&2
+
echo "You must be root to perform this operation" 1>&2
  exit 1
+
exit 1
 
fi
 
fi
  
 
if [ -e "$CONFFILE" ]; then
 
if [ -e "$CONFFILE" ]; then
  . "$CONFFILE"
+
. "$CONFFILE"
 
fi
 
fi
  
 
case "$1" in
 
case "$1" in
  new)
+
new)
 
     new "$@"
 
     new "$@"
 
     ;;
 
     ;;
  del)
+
del)
 
     del "$@"
 
     del "$@"
 
     ;;
 
     ;;
  conf)
+
conf)
     conf "$@"  
+
     conf "$@"
 
     ;;
 
     ;;
  run)
+
run)
 
     run "$@"
 
     run "$@"
 
     ;;
 
     ;;
  *)
+
*)
 
     usage "$@"
 
     usage "$@"
 
     ;;
 
     ;;
Line 217: Line 211:
 
</nowiki>}}
 
</nowiki>}}
  
== Notes ==
+
== Note ==
 
+
Alcune note:
Some notes:
+
* I programmi/script usati dovrete fornirveli autonomamente, l’unico file che vi verrà fornito sarà lo script {{ic|exdongle}}.
* The programs/scripts used should be self contained, the only file treated is the one passed.
+

Revision as of 15:10, 20 June 2012

Supponendo di voler eseguire un certo programma all’inserimento di una pennina USB. Personalmente, ho aggiunto questa caratteristica perché mi ero stufato dei blocchi del pc dove tastiera e mouse sono inservibili(ed anche le scorciatoie da tastiera non funzionano).

Quindi ho aggiunto una misura di sicurezza, in modo che solo una chiavetta USB contenente la giusta chiave possa eseguire il programma.

Installazione

Mettere una copia dello script exdongle (che trovate più in basso) nella cartella degli eseguibili(uno dei percorsi indicati nella variabile d’ambiente $PATH comunemente è consigliato usare /usr/bin/).

Aggiungere la seguente linea alla regola di mount delle periferiche USB (modificarla a seconda della propria configurazione):

ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"

Eseguire l’opzione di configurazione, per esempio

exdongle conf -k "$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM$RANDOM" -p "-10" -s "on"

Questo imposta la configurazione con chiavi casuali(solo con le chiavi giuste potranno essere eseguiti sul computer i programmi o gli script), e la priorità di esecuzione a -10

Configurare una pennina USB

Per prima cosa, scrivere lo script che verrà inserito all’inserimento della pennina.

Ad esempio:

test.sh
#!/bin/sh

DISPLAY=:0 xterm

Adesso eseguire nuovamente exdongle utilizzando l'opzione new:

exdongle new <punto di mount della pennina USB> test.sh

Ora, ogni volta che viene inserita la pennina, una finestra di terminale, lanciata dall’utente root verrà eseguita sul display :0. Questo può essere utile per scopi amministrativi.

Sicurezza

Questa procedura non garantisce la sicurezza del sistema, ed è quindi consigliato utilizzarla solo su pc domestici.

exdongle script

/usr/bin/exdongle
#!/bin/sh

# exdongle mkexdongle

###############################################################################

CONFFILE="/etc/exdongle.conf"

###############################################################################

function usage() {

 echo ""
 echo "USAGE: $0 new <DIR> <PROG>"
 echo "       $0 del <DIR>"
 echo "       $0 conf [-k KEY] [-p PRIORITY] [-s SWITCH]"
 echo "       $0 run <DIR>"
 echo ""
 echo "  new:"
 echo "    DIR <S>:    The directory on the dongle to execute"
 echo "    SCRIPT <S>: The script to run on dongle"
 echo ""
 echo "  del:"
 echo "    DIR [S]: The directory on the dongle to execute"
 echo ""
 echo "  conf:"
 echo "    -k <S>: specify key"
 echo "    -p <N>: priority to run script at"
 echo "    -s <on|off>: Activate or deactivate exdongle"
 echo ""
 echo "  run:"
 echo "    DIR <S>: Directory to find script in"
 echo ""

 exit 0

}

###############################################################################

function new() {

 if [ ! "$#" -eq 3 ]; then
    usage $@;
    exit 1;
 fi

 DIR="$2"
 PROG="$3"
 PLOC="$DIR/.$(hostname).$key"

 rm "$PLOC" &> /dev/null
 cp "$PROG" "$PLOC"

 exit 0

}

###############################################################################

function del() {

 DIR="$2"
 PLOC="$DIR/.$(hostname).$key"

 if [ -e "$PLOC" ]; then
    rm -f "$PLOC"
 fi

 exit 0

}

###############################################################################

function conf() {

 shift
 while getopts "k:p:s:" optname; do
    case "$optname" in
     k)
       key="$OPTARG"
       ;;
     p)
       priority="$OPTARG"
       ;;
     s)
       if [ "$OPTARG" = "on" ] || [ "$OPTARG" = "off" ]; then
         switch="$OPTARG"
       fi
       ;;
    esac
 done

 echo "# exdongle configuration file" > "$CONFFILE"
 echo "key=\"$key\"" >> "$CONFFILE"
 echo "priority=\"$priority\"" >> "$CONFFILE"
 echo "switch=\"$switch\"" >> "$CONFFILE"

 chmod 0600 "$CONFFILE"

 exit 0

}

###############################################################################

function run() {

 if [ ! "$switch" = "on" ]; then
    exit 0
 fi

 if [ ! "$#" -eq 2 ]; then
    usage $@
    exit 1
 fi

 DIR="$2"
 PLOC="$DIR/.$(hostname).$key"
 ELOC="/tmp/.exdongle.prog"

 if [ ! -e "$PLOC" ]; then
    echo "No executable file found!" 1>&2
    exit 0
 fi

 rm -f "$ELOC"
 cp "$PLOC" "$ELOC"
 chmod 0500 "$ELOC"
 nice -n "$priority" $ELOC
 rm -f "$ELOC"
 exit 0

}

###############################################################################

if [ ! "$UID" == "0" ]; then
 echo "You must be root to perform this operation" 1>&2
 exit 1
fi

if [ -e "$CONFFILE" ]; then
 . "$CONFFILE"
fi

case "$1" in
 new)
    new "$@"
    ;;
 del)
    del "$@"
    ;;
 conf)
    conf "$@"
    ;;
 run)
    run "$@"
    ;;
 *)
    usage "$@"
    ;;
esac

exit 0

Note

Alcune note:

  • I programmi/script usati dovrete fornirveli autonomamente, l’unico file che vi verrà fornito sarà lo script exdongle.