it-swarm.com.de

Wie führe ich ein Shell-Skript aus, wenn ein neues USB-Speichergerät erkannt wird?

Ich möchte ein Skript, das das Protokoll speichert und es anmeldet, sobald ein USB-Massenspeicher angeschlossen ist (mit der Datei 'OKdump'). Und wenn etwas Ungewöhnliches (wie ein visuell vorhandener Fehler) erkannt wird, möchte ich dies es, um einen Screenshot aufzunehmen und auf demselben Laufwerk zu speichern.

17
Amith KK

Verwenden Sie Udev. Udev ist ein Geräte-Manager-Daemon. Es ist unter anderem für die Benennung Ihrer Geräte zuständig. Sie können udev-Regeln definieren, indem Sie Dateien mit einer bestimmten Syntax in das Regelverzeichnis einfügen. Die Regeln können viele Dinge tun - insbesondere können sie Skripte ausführen, wenn ein bestimmtes Gerät verbunden ist.

So lösen Sie Ihr Problem:

Zuerst müssen Sie Informationen auf Ihrem Gerät sammeln. Nehmen wir an, Sie haben es angeschlossen und wissen, dass es unter dem Namen /dev/sdb1 läuft. Wenn ja:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

Der Befehl gibt Informationen zu Ihrem Gerät aus. Es ist ziemlich langwierig. Sie müssen etwas finden, das das Gerät eindeutig identifiziert. Das könnte eine Serie wie ATTRS{serial}=="UA04FLGC" oder eine Kombination anderer Attribute wie ATTRS{idVendor} und ATTRS{idProduct} sein. Die meisten Namen sind mehr oder weniger selbsterklärend. Wählen Sie eine oder mehrere, die Ihnen vernünftig erscheinen. Wenn sie nicht funktionieren, probieren Sie etwas anderes aus.

Wenn Sie einen eindeutigen Bezeichner gefunden haben, erstellen Sie in /etc/udev/rules.d eine Datei, die mit zwei Ziffern beginnt und mit .rules endet. Die beiden Ziffern geben die Reihenfolge der Verarbeitung dieser Regeldateien an - 70-usb-log-custom.rules sollte eine gute Wahl für Sie sein. Die Syntax dieser Regeldatei kann sehr komplex sein. Wenn Sie interessiert sind, google udev. Öffnen Sie nicht einfach die neu erstellte Datei und bearbeiten Sie sie so, dass sie etwa so aussieht:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

Dies ist eine aktuelle Udev-Datei, die ich verwende. Es gibt drei Regeln. Jede Zeile ist eine Regel für sich. In der ersten Zeile wird ein Skript ausgeführt, um ein entschlüsseltes Gerät zu erstellen, wenn eine verschlüsselte Festplatte angeschlossen ist. In der zweiten Zeile wird dasselbe Skript mit unterschiedlichen Optionen aufgerufen, falls das entschlüsselte Gerät entfernt wird. In der dritten Zeile werden Berechtigungen für ein anderes verwandtes Gerät festgelegt.

Wahrscheinlich brauchen Sie nur die erste Zeile. Löschen Sie den Rest und fügen Sie die richtige Seriennummer ein (oder eine Kombination von Parametern, die Sie ausgewählt haben, um Ihr Gerät zu identifizieren).

Erklärung meiner Akte:

KERNEL=="sd?1" sagt, dass das Gerät, nach dem wir in dieser Regel suchen, nach /dev/sda1, /dev/sdc1 oder so ähnlich benannt ist. Das Fragezeichen ist ein Platzhalter für jeden Buchstaben. ATTRS{serial}=="UA04FLGC" ist hier die eindeutige Kennung. Für das andere Gerät, von dem ich gesprochen habe (dritte Zeile), verwende ich nicht die Seriennummer, sondern eine Kombination aus SYSFS{idVendor}=="1781" und SYSFS{idProduct}=="0c9f", um es zu identifizieren.

ACTION=="add" gibt an, dass die Regel nur beim Hinzufügen des Geräts angewendet werden soll. nicht, wenn es entfernt wird.

SYMLINK+="cusb1" erstellt einen Symlink zur Festplatte, so dass Sie ihn unter /dev/cusb1 finden.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" führt das Skript aus und übergibt ihm 'add' und '% k' (den Gerätenamen).

Ich werde nicht näher darauf eingehen, da es hervorragende Tutorials zu udev-Regeln gibt. Was Sie hier lesen, sollte jedoch ausreichen, um angestarrt zu werden.

13
con-f-use