Rédaction d'images brutes en toute security sur des keys USB

En essayant beaucoup de Linux différents, sur toutes sortes de matériels, je trouve souvent mes commands d'auto-saisie comme ceci:

sudo dd if=xubuntu-13.10-desktop-amd64.iso of=/dev/sdc bs=10240 

Inutile de dire, tôt ou tard, je vais taper la destination et essuyer un disque dur au lieu de la key USB prévue. Je voudrais ne pas utiliser sudo chaque fois ici.

Sur mon système, Ubuntu assez moderne, les permissions sur /dev/sdc sont comme /dev/sdc : (quand un bâton est présent):

 $ ls -al /dev/sdc* brw-rw---- 1 root disk 8, 32 Apr 6 22:10 /dev/sdc 

Comment accorder à mon user habituel un access en écriture à des keys USB randoms mais pas à d'autres disques présents dans mon système?

Je pense que vous pouvez utiliser UDEV pour faire ce que vous voulez. /etc/udev/rules.d/99-thumbdrives.rules vous /etc/udev/rules.d/99-thumbdrives.rules un file de règles tel que /etc/udev/rules.d/99-thumbdrives.rules vous devez simplement append une règle qui autorisera un groupe Unix ou un access user à des keys USB arbitraires.

 KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="<user>", GROUP="<group>", MODE="0660" 

Créer le périphérique en utilisant l'user <user> et le groupe <group> .

Exemple

  1. Après avoir ajouté cette ligne à mon système.

     KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", OWNER="saml", GROUP="saml", MODE="0660" 
  2. Et recharger mes règles:

     $ sudo udevadm control --reload-rules 
  3. Si j'insère maintenant une key USB dans mon système, mon /var/log/messages apparaît comme suit:

     $ sudo tail -f /var/log/messages Apr 13 11:48:45 greeneggs udisksd[2249]: Mounted /dev/sdb1 at /run/media/saml/HOLA on behalf of uid 1000 Apr 13 11:51:18 greeneggs udisksd[2249]: Cleaning up mount point /run/media/saml/HOLA (device 8:17 is not mounted) Apr 13 11:51:18 greeneggs udisksd[2249]: Unmounted /dev/sdb1 on behalf of uid 1000 Apr 13 11:51:18 greeneggs kernel: [171038.843969] sdb: detected capacity change from 32768000 to 0 Apr 13 11:51:39 greeneggs kernel: [171058.964358] usb 2-1.2: USB disconnect, device number 15 Apr 13 11:51:46 greeneggs kernel: [171066.053922] usb 2-1.2: new full-speed USB device number 16 using ehci-pci Apr 13 11:51:46 greeneggs kernel: [171066.134401] usb 2-1.2: New USB device found, idVendor=058f, idProduct=9380 Apr 13 11:51:46 greeneggs kernel: [171066.134407] usb 2-1.2: New USB device ssortingngs: Mfr=1, Product=2, SerialNumber=0 Apr 13 11:51:46 greeneggs kernel: [171066.134410] usb 2-1.2: Product: USBDrive Apr 13 11:51:46 greeneggs kernel: [171066.134412] usb 2-1.2: Manufacturer: JMTek Apr 13 11:51:46 greeneggs kernel: [171066.135470] usb-storage 2-1.2:1.0: USB Mass Storage device detected Apr 13 11:51:46 greeneggs kernel: [171066.136121] scsi17 : usb-storage 2-1.2:1.0 Apr 13 11:51:46 greeneggs mtp-probe: checking bus 2, device 16: "/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2" Apr 13 11:51:46 greeneggs mtp-probe: bus: 2, device: 16 was not an MTP device Apr 13 11:51:47 greeneggs kernel: [171067.139462] scsi 17:0:0:0: Direct-Access JMTek USBDrive 7.77 PQ: 0 ANSI: 2 Apr 13 11:51:47 greeneggs kernel: [171067.140251] sd 17:0:0:0: Attached scsi generic sg2 type 0 Apr 13 11:51:47 greeneggs kernel: [171067.142105] sd 17:0:0:0: [sdb] 64000 512-byte logical blocks: (32.7 MB/31.2 MiB) Apr 13 11:51:47 greeneggs kernel: [171067.144236] sd 17:0:0:0: [sdb] Write Protect is off Apr 13 11:51:47 greeneggs kernel: [171067.145988] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.145998] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.153721] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.153728] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.159028] sdb: sdb1 Apr 13 11:51:47 greeneggs kernel: [171067.164760] sd 17:0:0:0: [sdb] No Caching mode page found Apr 13 11:51:47 greeneggs kernel: [171067.164768] sd 17:0:0:0: [sdb] Assuming drive cache: write through Apr 13 11:51:47 greeneggs kernel: [171067.164775] sd 17:0:0:0: [sdb] Attached SCSI removable disk Apr 13 11:51:47 greeneggs kernel: [171067.635474] FAT-fs (sdb1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck. Apr 13 11:51:47 greeneggs udisksd[2249]: Mounted /dev/sdb1 at /run/media/saml/HOLA on behalf of uid 1000 
  4. Maintenant vérifier les files de périphériques sous /dev montre ce qui suit:

     $ ls -l /dev/sd* brw-rw----. 1 root disk 8, 0 Apr 13 09:17 /dev/sda brw-rw----. 1 root disk 8, 1 Apr 13 09:17 /dev/sda1 brw-rw----. 1 root disk 8, 2 Apr 13 09:17 /dev/sda2 brw-rw----. 1 saml saml 8, 16 Apr 13 11:51 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 13 11:51 /dev/sdb1 

Donc, cela semble avoir fonctionné.

Être plus explicite

Ce qui précède fonctionnera mais aura probablement ces règles appliquées à chaque périphérique de bloc qui n'est pas tout à fait ce que nous voulons. Pour limiter un peu votre attention, vous pouvez utiliser ATTRS{..}==... règles d'atsortingbut pour limiter l'application à un matériel spécifique. Dans mon cas, je veux seulement qu'il soit appliqué à une seule key USB.

Étape # 1 – périphérique id unique

Pour commencer, nous pouvons utiliser cette command une fois que nous avons monté la key USB, afin que nous puissions utiliser udevadm pour la scruter, en la tâtonnant pour ses attributes particuliers.

Ici, je me concentre sur les attributes "fabricant" et "produit".

 $ udevadm info -a -p $(udevadm info -q path -n /dev/sdb)|grep -iE "manufacturer|product" ATTRS{manufacturer}=="JMTek" ATTRS{idProduct}=="9380" ATTRS{product}=="USBDrive" ATTRS{idProduct}=="0020" ATTRS{manufacturer}=="Linux 3.13.7-100.fc19.x86_64 ehci_hcd" ATTRS{idProduct}=="0002" ATTRS{product}=="EHCI Host Controller" 

REMARQUE: les ATTRS{..}==.. sont des attributes des périphériques parents dans la hiérarchie d'où provient finalement le file de périphérique de ce périphérique. Donc, dans notre cas, le périphérique de bloc étant ajouté, /dev/sdb provient d'un périphérique parent USB, nous recherchons par exemple les attributes de ce parent, ATTRS{manufacturer}=...

Donc, dans cet exemple, je sélectionne le fabricant "JMTek" et le produit "USBDrive".

Étape # 2 – modifier .rules flie

Donc, avec ces bits supplémentaires en main, nous les appendons à notre file .rules origine.

 KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", ATTRS{manufacturer}=="JMTek", ATTRS{product}=="USBDrive", OWNER="saml", GROUP="saml", MODE="0660" 

Étape # 3 – Essayer

Maintenant, lorsque nous rechargons nos règles et que nous démontons / retirons / réinsérons notre key USB, nous obtenons cette règle:

 $ ls -l /dev/sdb* brw-rw----. 1 saml saml 8, 16 Apr 13 12:29 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 13 12:29 /dev/sdb1 

Cependant si j'insère un appareil complètement différent:

 $ ls -l /dev/sdb* brw-rw----. 1 root disk 8, 16 Apr 13 12:41 /dev/sdb brw-rw----. 1 root disk 8, 17 Apr 13 12:41 /dev/sdb1 

Les references

  • ArchLinux Wiki UDEV Sujet