UDEV : Exécuter un script à l'insertion d'un disque ou clé USB
Table des matières
Dans cet article, nous allons voir comment exécuter un script lors de l'insertion d'un disque ou une clé USB.
Cet article est rédigé suite à une demande qu'on m'a faite. L'idée était de créer une station de travail pour détecter les virus sur clé USB et de lancer un scan automatique de la clé dès son insertion.
On va donc créer une règle UDEV pour cette action particulière.
On aura besoin de l'ACTION qui concerne l'ajout, de l'info KERNEL correspondant à la clé USB, et de l'action RUN, qui correspond au script à exécuter.
Pour créer une règle udev, comme d'hab, c'est dans /etc/udev/rules.d :
On va créer un fichier de règle :
On va écrire la règle udev suivante :
Le script va s'appliquer à tous les disques. Si on veut exclure sda, on peut mettre une expression régulière plus avancée :
On prendra soin de créer le script souhaité évidemment.
On peut spécifier des attributs supplémentaires si on veut que ça s'exécute sur un disque particulier (je pense à une synchro de sauvegarde auto par exemple) :
On recharge udev :
Ou on reboot.
Au moment de l'insertion de la clé, le script est exécuté , on peut voir dans les logs.
On passera avant les logs en mode debug
Voici l'extrai lors du branchement de la clé USB (j'ai coupé au milieu) :
On repassera les logs d'udev en warning après :
Introduction
Dans cet article, nous allons voir comment exécuter un script lors de l'insertion d'un disque ou une clé USB.
Cet article est rédigé suite à une demande qu'on m'a faite. L'idée était de créer une station de travail pour détecter les virus sur clé USB et de lancer un scan automatique de la clé dès son insertion.
Configurer udev
On va donc créer une règle UDEV pour cette action particulière.
On aura besoin de l'ACTION qui concerne l'ajout, de l'info KERNEL correspondant à la clé USB, et de l'action RUN, qui correspond au script à exécuter.
Pour créer une règle udev, comme d'hab, c'est dans /etc/udev/rules.d :
Code BASH :
cd /etc/udev/rules.d
On va créer un fichier de règle :
Code BASH :
vi 00_ajout_disque.rules
On va écrire la règle udev suivante :
Code BASH :
ACTION=="add", "KERNEL==sd*", RUN+="/usr/local/bin/scanusb.sh"
Le script va s'appliquer à tous les disques. Si on veut exclure sda, on peut mettre une expression régulière plus avancée :
Code BASH :
ACTION=="add", "KERNEL==sd[b-z]", RUN+="/usr/local/bin/scanusb.sh"
On prendra soin de créer le script souhaité évidemment.
On peut spécifier des attributs supplémentaires si on veut que ça s'exécute sur un disque particulier (je pense à une synchro de sauvegarde auto par exemple) :
Code TEXT :
ATTRS{vendor}=="LinuxtricksCompany", ATTRS{model}=="ABCDE", ATTRS{serial}=="123465789"
On recharge udev :
Code BASH :
udevadm control --reload
Ou on reboot.
Tester
Au moment de l'insertion de la clé, le script est exécuté , on peut voir dans les logs.
On passera avant les logs en mode debug
Code BASH :
udevadm control --log-priority=debug journalctl -f
Voici l'extrai lors du branchement de la clé USB (j'ai coupé au milieu) :
Code BASH :
févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: /etc/udev/rules.d/00_ajout_disque.rules:1 RUN '/usr/local/bin/scanusb.sh' févr. 13 19:21:48 adrien-testfedora kernel: sdb: sdb1 sdb2 févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: /usr/lib/udev/rules.d/50-udev-default.rules:63 GROUP 994 févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: /etc/udev/rules.d/60-ioschedulers.rules:6 ATTR '/sys/devices/pci0000:00/0000:00:11.0/0000:02:03.0/usb1/1-1/1-1:1.0/host3/target3:0:0/3:0:0:0/block/sdb/queue/scheduler' writing 'bfq' [...] févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: Found 'b8:16' claiming '/run/udev/links/\x2fdisk\x2fby-path\x2fpci-0000:02:03.0-usb-0:1:1.0-scsi-0:0:0:0' févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: Preserve already existing symlink '/dev/disk/by-path/pci-0000:02:03.0-usb-0:1:1.0-scsi-0:0:0:0' to '../../sdb' févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: Running command "/usr/local/bin/scanusb.sh" févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: Starting '/usr/local/bin/scanusb.sh' févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: Successfully forked off '(spawn)' as PID 14085. févr. 13 19:21:48 adrien-testfedora systemd-udevd[14084]: sdb: Process '/usr/local/bin/scanusb.sh' succeeded.
On repassera les logs d'udev en warning après :
Code BASH :
udevadm control --log-priority=warning