Execute on USB insert (Italiano)
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.