Une clé USB qui lance des scripts d'administration.
Par Michel Billaud, mercredi 21 décembre 2011 à 17:17 :: Bidouilles :: #68 :: rss
Imaginons un gros parc de machines sous linux, qui tournent à peu près mais sur lesquelles il faut faire quelques manips d'administration. Manque de chance, on ne peut pas faire les manips par ssh (par exemple, une mise à jour malencontreuse a viré le pilote de la carte réseau). D'où l'idée de mettre sur une clé USB un script avec les commandes à appliquer, et s'arranger pour que ce script soit lancé dès qu'on insère la clé USB, sans avoir à s'authentifier. Évidemment, il n'est pas question de faire ça avec n'importe quelle clé, et il faut préparer les machines avant.
Idée : avoir une clé USB qui permet de lancer des actions quand on l'insère, sans avoir à s'authentifier.
Utilisation envisagée : réparations rapides, sur machines en état de booter sous linux.
- l'administrateur enregistre la suite de commandes de réparations dans un script de la clé USB
- il passe sur chaque machine démarrée sous Linux pour insérer sa clé, ce qui exécute le script.
Testé sur Debian "squeeze" par une belle après-midi d'octobre 2011.
Solution technique
Se base sur "udev", qui gère dynamiquement les évènements sous Linux.
Insèrer une clé USB déclenche une cascade d'évènements : chargement de pilotes USB, du pilote SCSI, SCSI_DISK, etc. qui finit par le montage de la clé USB.
Ce comportement est défini par les fichiers de configuration de /etc/udev/rules.d
qui décrivent ce qu'il faut faire en fonction des actions au niveau de chacun des sous-systèmes.
En pratique, pour observer les évènements :
- lancer la commande
udevadm monitor --udev
dans un terminal - insérer / enlever des dispositifs USB
- remarquer les actions (
add
,remove
) et les sous-systèmes, indiqués entre parenthèses (scsi
,usb
, etc.)
Les clés USB ont un numéro de série individuel, qui assure c'est bien la clé spéciale de l'administrateur
Ici on décrit
- comment trouver le numéro de série de la clé
- comment lancer un script quand cette clé est insérée
TROUVER LE NUMERO DE SÉRIE DE LA CLé
- insérer la clé ;
- normalement elle s'auto-monte, par exemple sur
/dev/sdb
(vérifier avecmount
) - faire
udevadm info --name=/dev/sdb --attribute-walk
pour afficher les infos liées aux différents devices. - l'un d'eux possède des attributs "product" et "serial"
ATTRS{product}=="Flash Drive" ATTRS{serial}=="............."
notez le numéro de série (points ci-dessus).
LANCER UN SCRIPT QUAND LA CLÉ EST INSÉRÉE / RETIRÉE
Dans /etc/udev/rules.d
, ajouter un fichier 91-cle-usb.rules
qui contiendra les lignes
SUBSYSTEM=="block", ACTION=="add", ATTRS{serial}=="........", SYMLINK="reparator", RUN="/usr/local/bin/cle-usb.sh add" SUBSYSTEM=="block", ACTION=="remove", ATTRS{serial}=="........", RUN="/usr/local/bin/cle-usb.sh remove"
qui lanceront le script /usr/local/bin/cle-usb.sh
avec le paramêtre add
ou remove
quand le sous-système
"scsi_disk" signale que la clé est ajoutée / enlevée.
Plusieurs sous-systèmes (usb
, scsi
...) signalent le même évènement "add
" (ou "remove
") (voir "udevadm monitoe
" plus haut).
"scsi_disk
" est celui de plus haut niveau. Le paramètre "SYMLINK
" indique que le périphérique sera montable dans /dev/reparator
(crée un lien symbolique vers /dev/sdb1
)
La règle est activée pour les periphs blocs /dev/sdb
et /dev/sdb1
, si il y a deux partitions sur /dev/sdb
.
Apparemment, c'est la seconde (sdb1
) qui est retenue.
Doc : man 7 udev
UN SCRIPT POUR ESSAYER
#!/bin/bash ( echo -n evenement $1 date ) >> /tmp/journal.txt
On pourrait y ajouter la séquence
mkdir /tmp/a mount /dev/reparator /tmp/a /tmp/a/monscript unmount /tmp/a
Ou encore, pour éviter de monopoliser la clé
case $1 in add) # monter la clé mkdir /tmp/a mount /dev/reparator /tmp/a || exit # copier le script dans /tmp ... # demonter # faire un signal sonore # lancer le script ... ;; remove) # # ... ;; esac
---
Note : Pour que la règle "91" soit prise en compte (sans rebooter)
udevadm control --reload-rules
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.