Sujet: Effacer une clé usb dès insertion (linux)
01/06/2010 @ 16:08:41: Coyote: Effacer une clé usb dès insertion (linux)
Bonjour à tous,

Nous allons recevoir pour un de nos clients, +/- 10.000 clés usb dont certaines sont contaminées par un virus (made in china).

opération :
insertion de la clé
effacer le contenu
retirer la clé

Je cherche donc, pour automatiser un peu la chose, une petite application qui, dès insertion de cette clé, efface le contenu physiquement (pas dans la corbeille).

environnement : Linux Ubuntu

Merci d'avance.
01/06/2010 @ 16:19:32: Jean-Christophe: Effacer une clé usb dès insertion (linux)
ah, flute, je viens de lire que c'était en linux :ohwell:
Sorry, je sais pas aider alors :sad:
01/06/2010 @ 17:29:45: philfr: Effacer une clé usb dès insertion (linux)
DBUS est ton ami, c'est via ce mécanisme que les desktops font un automount de la clé.

Tu dois faire pareil, ou remplacer l'automount par un mkfs.vfat de la partition 1 de la clé.
01/06/2010 @ 18:37:40: Coyote: Effacer une clé usb dès insertion (linux)
merci pour vos réponses.

Philfr> je ne maitrise pas vraiment DBUS, une piste ou un lien ?
01/06/2010 @ 21:36:43: philfr: Effacer une clé usb dès insertion (linux)
Udev est une couche un peu plus bas niveau peut-être plus appropriée finalement.
Un peu de lecture:
http://www.reactivated.net/writing_udev_rules.html

En particulier le paragraphe "Running external programs upon certain events" devrait te donner la solution à ton problème.
04/06/2010 @ 19:04:12: philfr: Effacer une clé usb dès insertion (linux)
Bon, j'ai fait un truc pour toi en python qui utilise dbus:

#!/usr/bin/python
import gtk
import dbus
import os

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
dbus_loop = DBusGMainLoop()


def device_added1(truc):
pos=truc.find("storage_serial_")
if pos>=0:
print "Added "+truc[pos+15:]
os.system("ls -l /dev/disk/by-path/")
#print 'Device %s was added'%truc

def device_removed1(truc):
pos=truc.find("storage_serial_")
if pos>=0:
print "Removed "+truc[pos+15:]

bus = dbus.SystemBus(mainloop=dbus_loop)
hal_manager_obj = bus.get_object ( 'org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
hal_manager_iface = dbus.Interface(hal_manager_obj, "org.freedesktop.Hal.Manager")

devices = hal_manager_iface.GetAllDevices ()

#for d in devices:
# print 'Found device %s'%d

bus.add_signal_receiver (device_added1, 'DeviceAdded',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')

bus.add_signal_receiver (device_removed1, 'DeviceRemoved',
'org.freedesktop.Hal.Manager',
'org.freedesktop.Hal',
'/org/freedesktop/Hal/Manager')

gtk.main()


Sauve ce contenu dans un fichier monitordbus.py et lance-le avec "python monitordbus.py".
Tu dois avoir installé sur ta bécane (sans doute par défaut sous ubuntu) python-dbus et python-gtk2.

Quand tu insères ou retires un stick ou un disque externe, tu auras un message qui affiche une info, ici j'insère/retire un stick puis un disque:

phil@shuttle:/mnt/bigdisk/home/phil$ python testdbus.py
Added Memorex_TD_Classic_003B_07710C1702FF_0_0
Removed Memorex_TD_Classic_003B_07710C1702FF_0_0
Added HITACHI__DK23BA_10________________________________0_0
Removed HITACHI__DK23BA_10________________________________0_0
^CTraceback (most recent call last):
File "testdbus.py", line 40, in <module>
gtk.main()
KeyboardInterrupt
phil@shuttle:/mnt/bigdisk/home/phil$


Quand le stick est inséré et reconnu, va voir dans /dev/disk/by-path le nom que porte ton device quand il est inséré dans ce slot USB en particulier.

shuttle:/mnt/bigdisk/home/phil# ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1a.7-usb-0:2:1.0-scsi-0:0:0:0 -> ../../sdc
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1a.7-usb-0:2:1.0-scsi-0:0:0:1 -> ../../sdd
lrwxrwxrwx 1 root root 9 4 jun 18:47 pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 4 jun 18:47 pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 9 4 jun 18:12 pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0 -> ../../sdb
lrwxrwxrwx 1 root root 9 4 jun 18:12 pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:1 -> ../../sde
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sda
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 4 jun 17:24 pci-0000:00:1f.2-scsi-1:0:0:0-part3 -> ../../sda3
lrwxrwxrwx 1 root root 9 4 jun 17:24 pci-0000:00:1f.5-scsi-1:0:0:0 -> ../../sr0
shuttle:/mnt/bigdisk/home/phil#


Chez moi, c'est /dev/disk/by-path/pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0 le disque, et /dev/disk/by-path/pci-0000:00:1a.7-usb-0:3:1.0-scsi-0:0:0:0-part1 la partition sur ce disque. Ça c'est pour que ton programme ne formatte que la clé qui est insérée dans ce slot là et pas un autre.
Attention, le *-part1 n'arrive que plusieurs secondes après la détection du device (recherche des partitions).

Alors:
- soit tu veux juste reformater la partition existante sur le stick, alors dans le code, tu remplaces le os.system("ls -l ...") par os.system("mkfs.vfat /dev/...-part1")
- soit tu veux écraser la table de partition aussi (on ne sait jamais que quelqu'un boote avec sa clé insérée et qu'il y a un virus de secteur boot), alors tu fais le repartitionnement d'un clé à la main, et tu utilises la commande sfdisk dans ton os.system() pour toutes les repartitionner pareil avant de reformater.

Tu peux aussi rajouter un effacement "dur" avec un dd /dev/zero avant toute autre manip.

J'espère que cela te fait avancer... :wink:
07/06/2010 @ 11:26:09: Coyote: Effacer une clé usb dès insertion (linux)
Philfr, un grand merci, le nettoyage a commencer ce matin et ton script marche nickel.
07/06/2010 @ 13:18:16: Symon: Effacer une clé usb dès insertion (linux)
Clap Clap Clap Clap moi je dis!
07/06/2010 @ 15:40:05: philfr: Effacer une clé usb dès insertion (linux)
Philfr, un grand merci, le nettoyage a commencer ce matin et ton script marche nickel.



Et tu écrases le mbr ou tu fais juste un reformat de la partition ?
08/06/2010 @ 09:21:08: Coyote: Effacer une clé usb dès insertion (linux)
je fait un reformat pour supprimer Conficker.X
Nous en sommes déjà à 4000 clés traitées.
l'opération prend +/- 30sec par clé.
Retour