Media amovibles

De Diablotins.org.


Lecteur optique, disquettes, clé USB
Image:brush.png
Un FreeBSD fraîchement installé ne donne aucun droit aux utilisateurs sur les périphériques.

Il est alors nécessaire d'acquérir le crédit de root pour les monter, ce qui, dans le cas des supports de stockage amovibles, disquettes, Cédéroms, clefs USB etc., n'est pas souhaitable.



Sommaire

Préparation

Quelque soit la recette utilisée pour monter vos périphériques, vous devez lire ce qui suit.

qui a le droit ?

Définissons les groupes d'utilisateurs dédiés aux pilotages des certains périphériques amovibles, floppy (lecteur de disquette) et cdrom (Lecteur CD).
Dans les exemples suivants, David et Lecid seront membres de floppy et de cdrom, Nolwenn, de cdrom.

Les permissions des périphériques

Au démarrage, le système consulte le fichier etc/devfs.conf pour déterminer les crédits à affecter aux périphériques. devfs.conf(5) propose la structure suivante:

Action périphérique utilisateur:groupe

Le mot clef «own» détermine le propriétaire du périphérique, «perm» les droits affectés à ce dernier. Ainsi:

link acd0 cdrom   #Cas particulier, le périphérique cdrom est un lien vers acd0.
own acd0 root:cdrom
perm acd0 0660
own cdrom root:cdrom
perm cdrom 0660
own     fd0 root:floppy
perm    fd0     0660

Les permissions du lecteur de disquette (fd0) et du lecteur de cédérom (acd0) sont ainsi définis: le propriétaire root et le groupe («:cdrom» ou «:floppy») ont le droit de lire et d'écrire sur le périphérique («666»/«-rw-rw----»);ce qui inclue «root» alors qu'il n'est pas membre des groupes idoines.

Le montage par l'utilisateur

Par défaut, seul root a le droit de monter un périphérique.Pour permettre aux autres de le faire, ajoutez une entrée dans sysctl.conf

# echo vfs.usermount=1 >> /etc/sysctl.conf

Et, pour éviter de redémarrer la machine:

# sysctl vfs.usermount=1

Les utilisateur peuvent ainsi monter des systèmes de fichiers, mais seulement dans leur propre espace. Ce qui veut dire que l'utilisateur doit être le propriétaire du point de montage.
Aussi, créez pour chaque utilisateur, un répertoire associé au système à monter:

david:$ mkdir ~/floppy ~/cdrom
lecid:$ mkdir ~/floppy ~/cdrom
nolwenn:$ mkdir ~/cdrom


Plus simplement et pour éviter de le faire à chaque nouvel utilisateur, créez le squelette idoine.

mkdir -p /usr/share/skel/cdrom /usr/share/skel/floppy

operator

La création de groupes dédié des exemples précédents est plus un cas d'école qu'un cas pratique.
Ne créez pas un groupe dédié au montage de périphériques, comme patrick doit souvent le rappeler, il existe déjà: c'est le groupe «operator».

Montage

Utilisez mount(8) et umount(8) pour cela:

mount /dev/qui /où

Vérifiez que votre périphérique se trouve dans /dev.

Systèmes de fichiers

La commande mount charge automatiquement le module noyau nécessaire au système de fichier. Mais cette action de mount n'est possible qu'en super utilisateur. Pour monter en utilisateur, il faut charger les modules nécessaires au boot ou inclure les systèmes de fichiers dans un noyau personnalisé. Par exemple pour les CD, il faut inclure cd9660.ko voir même udf.ko. Les systèmes inclus au noyau GENERIC diffèrent suivant les versions de FreeBSD.

Les clefs USB

Ces périphériques sont détectés par le système lors de leur introduction, consultez la console d’événement pour les reconnaître.
- Généralement, les périphériques de stockage USB sont reconnus comme des disques SCSI: da[n]. -
N'étant pas branchés au démarrage du système, il ne sont pas présent dans /dev/ et ne peuvent donc pas être déclarés dans /etc/devfs.conf comme précédemment.
Lorsqu'ils sont détectés, le sytème doit en créer les entrées. Définissez les droits requis par leurs utilisateurs en ajoutant une règle à /etc/devfs.rules:

[usb_key=1]
add path 'da2*' mode 0660 user root group cdrom

Si, vous n'avez aucun véritable disque SCSI dans la station, utilisez da*. Cette règle est incluse dans l'ensemble usb_key. Activez la au démarrage dans /etc/rc.conf par:

devfs_system_ruleset="usb_key"


Et, comme précédemment, précisons dans /etc/fstab:

/dev/da2s1   /usr/home/david/photo    msdos    ro,noauto    0 0
/dev/da2s1   /usr/home/nolwenn/photo  msdos    ro,noauto    0 0
/dev/da2s1   /usr/home/Joueur/photo   msdos    ro,noauto    0 0

Ici, mon appareil photo numérique (reconnu comme /dev/da2s1), par exemple, sera monté automatiquement dans ~/photo, avec les même droits que cdrom.

Les graveurs

Pour utiliser sysutils/cdrtools vous avez certainement associé un pilote périphérique SCSI («cd[n]») à votre lecteur de cédérom, même s'il ne l'est pas.
Aussi, considerez, outre ce lecteur, d'autres périphériques supplémentaires à considérer: «pass[n]».

Ajoutez les entrées nécessaires au fichier «/etc/devfs.conf».

Pré-définir le montage

Le système consulte le fichier /etc/fstab pour contrôler le montage de système de fichier.
Définissez une entrée pour chaque utilisateur et chaque périphérique:

/dev/cd0  /usr/home/david/cdrom cd9660 ro,noauto 0 0
/dev/cd0  /usr/home/nolwenn/cdrom cd9660 ro,noauto 0 0
/dev/cd0  /usr/home/lecid/cdrom cd9660 ro,noauto 0 0

/dev/fd0  /usr/home/david/floppy msdos rw,noauto 0 0
/dev/fd0  /usr/home/lecid/floppy msdos rw,noauto 0 0

Les Cédéroms seront automatiquement montés en cd9660, les disquettes en FAT.

commande simple

Il suffit d'utiliser désormais la commande «mount»:

$ mount ~/cdrom
$ mount ~/floppy

Interfaces graphiques

Ces interfaces présentant des icônes pour monter ces périphériques, cliquez ! Sinon, créez des icônes qui représentent les commande précédentes.

Montage automatique

Il existe nombreuses possibilités via le démon amd(8).
Mais un rapide coup d’œil à la documentation va vous montrer qu'il est assez compliqué de le configurer. Pour résumer, ce démon se comporte comme un serveur NFS qui va monter un périphériques dès que l'on tente d'accéder à son répertoire.
Heureusement, il existe le port sysutils/automounter qui va faire le boulot de configuration à votre place. Mieux, via devd(8), il va créer tout seul les points de montage dans /Media.


Les mains dans les poches, après son installation, ajoutez l'entrée dans rc.conf

automounter_enable=yes

Et lancez le

service automounter start

Entrez une clef usb et:

ls /media
iso9660   msdosfs

Deux systèmes de fichiers apparaissent, un CDRom et un FAT.

ls /media/msdosfs/
DEBIAN_LIVE

Le Label de la clef est apparu, vous pouvez la parcourir...


Les media virtuels

Attention ce qui suit ne fonctionne que depuis la branche 5 de FreeBSD;auparavant la procédure utilise les fonction vn et vnconfig.

Ceux sont des images de média amovibles, Cédérom (ISO) ou disquettes (flp).
Pour éviter d'avoir à les graver, FreeBSD va créer un périphérique pour les contenir.

Vous avez récupéré l'ISO de Duke Nukem 3D et vous voudriez y jouer grâce aux émulateurs, DosBox par exemple ?
Créez un périphérique (md) qui pointe sur le fichier, ou plutôt, son contenu:

   mdconfig -a -t vnode -f ~david/game/DUKE3D.ISO -u 1

Le paramètre «-u» vous permet de forcer le numéro du périphérique, ici, «md1»; pour utiliser la numérotation automatique, omettez le.

Montez le périphérique, de manière classique:

   mount -t cd9660 /dev/md1 ~/cdrom

Démontez le tout:

   mount -u ~/cdrom

Libérez le périphérique virtuel:

   mdconfig -d -u 1

Notez que certains fichiers dit «ISO» sont en fait des images faites par le logiciel Nero, dans un format un peu particulier, dit «.nrg», qui comporte une entête supplémentaire. Supprimez la:

dd if=FichierNero.nrg of=Fichier9660.iso bs=2048 skip=150

Hal et le Plug'&'play

Hal devrais permettre d'automatiser le montage, du début à la fin. C'est à dire que, hormis la gestion des droits citée au début, vous n'avez rien à faire.
Hal surveille dbus et il vous faut des outils pour surveiller hal...
C'est l'inconvénient du bidule, sans grosse artillerie KDE, Gnome ou XFCe, point de salut.
N'oubliez pas que Hal, de lui-même ne fait rien, rien d'autre que de signaler l'arrivée d'une nouveau périphérique et surtout de sa classe. En effet les logiciels qui écoutent Hal, attendent une classe de périphérique particuliere pour proposer à l'utilisateur une utilisation définie à l'avance.
Dans notre cas, il s'agit de «org.freedesktop.Hal.Device.Storage.Removable».


Démarrez le bidule, au démarrage dans rc.conf:

dbus_enable=yes
hald_enable=yes

ou à la volée

service dbus onestart
service hald onestart

Définissez une règle pour les périphériques amovibles, dans /usr/local/etc/PolicyKit/PolicyKit.conf

david:~>cat /usr/local/etc/PolicyKit/PolicyKit.conf
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->

<!DOCTYPE pkconfig PUBLIC "-//freedesktop//DTD PolicyKit Configuration 1.0//EN"
"http://hal.freedesktop.org/releases/PolicyKit/1.0/config.dtd">

<!-- See the manual page PolicyKit.conf(5) for file format -->

<config version="0.1">
    <match user="root">
        <return result="yes"/>
    </match>
    <define_admin_auth group="operator"/> 
        <match action="org.freedesktop.hal.storage.mount-removable"> 
                <return result="yes"/> 
        </match> 
        <match action="org.freedesktop.hal.storage.mount-fixed"> 
                <return result="yes"/> 
        </match> 
        <match action="org.freedesktop.hal.storage.eject"> 
                <return result="yes"/> 
        </match> 
</config>
Les version modernes de sysutils/policykit ne nécessitent plus de
polkitd_enable
dans rc.conf.C'est désormais une bibliothèque et non un service.

Maintenant, connectez vous sous votre environnement de bureau, branchez une clef et attendez...

Documentation

Projets :