Montage sélectif de clé USB sur FreeBSD

Mon problème a résoudre ici est assez simple. Permettre à un utilisateur sans droits du système de monter une clé USB définit à un emplacement spécifique.

Sous Linux, ça se serait traduit par une création de répertoire et une ligne ajoutée à /etc/fstab avec un UUID= et l’option users.
Mais je dois le faire sous FreeBSD et il n’y a ni l’option users ni udev.

L’exercice est fait ici avec FreeBSD Release 10.0. Le dossier à utiliser est /sas. La clé est formatée avec une seule partition en VFAT.

Label de partition

Insérer la clé USB.

Il faut commencer par trouver le périphérique de la partition qui nous intéresse. La commande dmesg nous renseigne sur le dernier périphérique utilisé :

# dmesg | tail
ugen2.2: <vendor 0x13fe> at usbus2
umass0: <vendor 0x13fe MEMUP, class 0/0, rev 2.00/1.10, addr 2> on usbus2
umass0:  SCSI over Bulk-Only; quirks = 0x4000
umass0:5:0:-1: Attached to scbus5
da0 at umass-sim0 bus 0 scbus5 target 0 lun 0
da0: < MEMUP PMAP> Removable Direct Access SCSI-0 device
da0: Serial Number 0748374E0011
da0: 40.000MB/s transfers
da0: 1908MB (3907584 512 byte sectors: 255H 63S/T 243C)
da0: quirks=0x2<NO_6_BYTE>

Ici, c’est le périphérique /dev/da0. Si on regarde /dev/da0*, on a :
/dev/da0
/dev/da0s1

On va pouvoir ajouter un label à cette partition da0s1 de cette clé USB :
# glabel label sas /dev/ad0s1

La partition a maintenant un label permanent qui apparaît comme /dev/label/sas. Si on remplace la clé USB par une autre clé partitionnée de la même façon, le label ne sera pas remis en place, il est vraiment spécifique au couple clé/partition.

Point de montage

On commence par créer le dossier /sas avec les bons droits :
# mkdir /sas
# chmod 770 /sas
# chown toto /sas
# chgrp toto /sas

On pourrait monter la partition à la main, mais c’est mieux de l’automatiser. On ajoute à /etc/fstab :
/dev/label/sas /sas msdosfs rw,noauto 0 0

Ici, je permet l’écriture (rw) et interdit le montage automatique (noauto). Le montage se fera par une action volontaire de l’utilisateur.

On peut vérifier que la partition monte bien :
# mount /sas
# ls /sas
Photos
# umount /sas

On peut aussi vérifier avec une autre clé USB, ça ne marche pas.

Droit aux utilisateurs

Jusqu’ici, seul root peut utiliser cette partition.On va faire en sorte qu’un utilisateur le puisse aussi.

Ajouter au fichier /etc/rc.conf la ligne :
devfs_system_ruleset="localrules"

Ajouter au fichier /etc/sysctl.conf la ligne :
vfs.usermount=1

Créer le fichier (ou ajouter) /etc/devfs.rules avec comme contenu :
[localrules=10]
add path 'label/sas' mode 0660 group toto

Après redémarrage, en insérant la clé USB, on peut voir les droits de /dev/label/sas :
crw-rw---- 1 root toto 0x69 29 avr 23:45 /dev/label/sas

Et, reconnecté en tant que toto, on doit pouvoir monter la partition simplement en lançant :
$ mount /sas
$ ls /sas
Photos
$ umount /sas

Si on donne pas à toto les droits utilisateurs sur le répertoire de montage, il le peut pas monter la partition sur ce répertoire. Mais il peut la monter ailleurs dans son dossier personnel.

Et voila :-)

Liens

http://www.freebsd.org/doc/handbook/geom-glabel.html
http://scratching.psybermonkey.net/2010/07/freebsd-how-to-allow-normal-user-to.html
http://www.freebsd.org/cgi/man.cgi?query=devfs.rules&sektion=5
http://www.freebsd.org/doc/handbook/usb-disks.html