Copyright © 2004 Mike Chirico
Copyright © 2004 Antonin Mellier
Copyright © 2004 Joëlle Cornavin
Article paru dans le n°109 de la Gazette Linux de décembre 2004.
Traduction française par Antonin Mellier
<antonin POINT mellier CHEZ laposte POINT net>
.
Relecture de la traduction française par Joëlle Cornavin
<jcornavi CHEZ club TIRET internet POINT fr>
.
Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Copyright (c) 2004 (GPU Free Documentation License)Dernière Mise à jour: http://prdownloads.sourceforge.net/souptonuts/README_Virtual_FS.html?download Date: Sun Sep 19 01:08:31 EDT 2004
Sous Linux, vous pouvez créer un fichier normal, le formater comme un système de fichiers ext2, ext3 ou reiser (reiserfs), puis le monter comme si c'était un disque physique. Il est ensuite possible de lire et d'écrire des fichiers sur ce périphérique nouvellement monté. Vous pouvez aussi copier le système de fichiers complet, puisque ce n'est qu'un fichier, sur un autre ordinateur. Si la sécurité est une de vos préoccupations, poursuivez votre lecture. Cet article vous montre comment chiffrer le système de fichiers et le monter avec les ACL (Access Control Lists, listes de contrôle d'accès). Ce comportement vous permet d'avoir un contrôle des droits plus étendu que les permissions traditionnelles, lire (r), écrire (w) et exécuter (x) pour les trois groupes d'utilisateurs file, owner et other.
C'est une excellente façon d'étudier différents systèmes de fichiers sans avoir à reformater un disque physique, c'est-à-dire que vous évitez la corvée de déplacer toutes vos données. Cette méthode est rapide — surtout par rapport à la préparation d'un lecteur physique. Ce qui est vraiment intéressant avec cette technique est que vous pouvez explorer différents systèmes de fichiers tels que reiserfs, ext3 ou ext2 sans avoir à acheter un disque physique supplémentaire. Du fait que le même fichier peut être monté sur plus d'un point de montage, vous pouvez alors être plusieurs à les étudier en même temps et partager le temps d'accès.
Créer un système de fichiers de cette manière vous permet de fixer une limite physique à la quantité d'espace utilisée qui, naturellement, sera égale à la taille du fichier. Ce peut être un avantage si vous devez déplacer ces informations sur d'autres serveurs. Puisque le contenu ne peut pas dépasser la taille du fichier, vous pouvez facilement garder une trace de la quantité d'espace disque actuellement utilisée.
Tout d'abord, créez un fichier de 20 Mo en exécutant la commande suivante :
$ dd if=/dev/zero of=disk-image count=40960 40960+0 enregistrements lus. 40960+0 enregistrements écrits |
Un count de 40960 a créé un fichier de 20 Mo car, par défaut, dd utilise une taille de bloc de 512 octets, ce qui donne la taille de 40960*512=20971520.
$ ls -l disk-image -rw-rw-r-- 1 chirico chirico 20971520 Sep 3 14:24 disk-image |
Ensuite, pour le formater en tant que système de fichiers ext3, exécutez simplement la commande suivante :
$ /sbin/mkfs -t ext3 -q disk-image mke2fs 1.32 (09-Nov-2002) disk-image is not a block special device. Proceed anyway? (y,n) y |
Le système vous demande si vous voulez continuer car c'est un fichier et non un périphérique bloc. Pas de problème. Nous allons le monter en tant que périphérique virtuel (loopback device), de façon à ce que ce fichier simule un périphérique bloc.
Créez maintenant un répertoire qui servira de point de montage pour ce périphérique virtuel :
$ mkdir fs |
Vous n'êtes maintenant plus qu'à une étape de la dernière. Il vous faut juste découvrir quel est le prochain numéro de périphérique virtuel disponible. Normalement, les périphériques virtuels commencent à zéro (/dev/loop0), puis augmentent normalement (/dev/loop1, /dev/loop2, ... /dev/loopn). Pour trouver facilement quels sont les périphériques virtuels utilisés actuellement, regardez dans /proc/mounts, car il se peut que la commande mount ne vous fournisse pas ce dont vous avez besoin.
$ cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw 0 0 /proc /proc proc rw,nodiratime 0 0 none /sys sysfs rw 0 0 /dev/sda1 /boot ext3 rw 0 0 none /dev/pts devpts rw 0 0 /proc/bus/usb /proc/bus/usb usbdevfs rw 0 0 none /dev/shm tmpfs rw 0 0 |
Comme sur mon ordinateur je n'ai aucun périphérique virtuel monté, je peux donc commencer de zéro. Exécutez la commande suivante en tant que root ou avec un compte qui a les privilèges de super-utilisateur.
# mount -o loop=/dev/loop0 disk-image fs |
C'est fait. Vous venez de monter le fichier en tant que périphérique. Maintenant, en jetant un coup d'œil à /proc/mounts, vous constatez que celui-ci utilise /dev/loop0 :
$ cat /proc/mounts rootfs / rootfs rw 0 0 /dev/root / ext3 rw 0 0 /proc /proc proc rw,nodiratime 0 0 none /sys sysfs rw 0 0 /dev/sda1 /boot ext3 rw 0 0 none /dev/pts devpts rw 0 0 /proc/bus/usb /proc/bus/usb usbdevfs rw 0 0 none /dev/shm tmpfs rw 0 0 /dev/loop0 /home/chirico/junk/fs ext3 rw 0 0 |
Vous pouvez maintenant créer de nouveaux fichiers, écrire dedans, les lire, bref faire tout ce que vous feriez normalement sur un lecteur de disque. Tout d'abord, je donne accès au compte chirico.
# chown -R chirico.chirico /home/chirico/junk/fs |
Maintenant, sous le compte chirico, il est possible de créer des fichiers :
$ cd /home/chirico/fs $ mkdir one two three $ ls -l total 15 drwx------ 2 chirico chirico 12288 Sep 3 14:28 lost+found drwxrwxr-x 2 chirico chirico 1024 Sep 3 14:34 one drwxrwxr-x 2 chirico chirico 1024 Sep 3 14:34 three drwxrwxr-x 2 chirico chirico 1024 Sep 3 14:34 two $ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 17G 11G 4.6G 71% / /dev/sda1 99M 83M 11M 89% /boot none 62M 0 62M 0% /dev/shm /home/chirico/junk/disk-image 20M 1.1M 18M 6% /home/chirico/junk/fs |
Pour démonter le système de fichiers, en tant que root, il vous suffit de faire appel à la commande umount. Pour libérer le périphérique virtuel, exécutez la commande losetup avec l'option -d. Vous pouvez utiliser les deux commandes comme suit :
# umount /home/chirico/junk/fs # losetup -d /dev/loop0 |
Avant d'entamer la partie concernant les ACL, comment configureriez-vous les droits sur le système de fichiers pour que des utilisateurs puissent créer et enregistrer des documents que d'autres pourraient modifier ? Par exemple, supposons que les utilisateurs chirico et sporkey travaillent ensemble sur un projet.
Il faut donc les ajouter au même groupe. Voici les commandes nécessaires :
# groupadd sharefs # chown -R root.sharefs /home/chirico/junk/fs # chmod 2775 /home/chirico/junk/fs # usermod -G sharefs sporkey # usermod -G sharefs chirico |
Notez que si ces changements n'entrent pas en vigueur pour vos utilisateurs (par exemple, s'ils étaient connectés quand vous avez exécuté les commandes), ils devront se déconnecter puis se reconnecter ou bien exécuter la commande :
$ newgrp sharefs |
Ce n'est pas vraiment un problème, n'est-ce pas ? Poursuivez donc votre lecture pour voir comment les ACL permettent d'éviter cette étape.
Plus important, même si l'ancienne méthode fonctionnait pour vous, à un moment ou à un autre, il se peut qu'on doive ajouter de nouveaux utilisateurs au projet. Que ferez-vous si certains de ces utilisateurs n'ont besoin que d'un sous-ensemble des droits ? Par exemple, vous avez des développeurs, des testeurs, des gestionnaires, ainsi que quelques personnes spéciales. Il y a des limites à ce que les droits rwx peuvent faire. Les ACL résolvent beaucoup de ces problèmes.
Pour les étapes suivantes, je pars du principe que vous utilisez Red Hat Fedora Core 2. Si ce n'est pas le cas, reportez-vous à la section Mise à niveau vers le noyau 2.6 ci-dessous. Nous allons aborder quatre points dans cette section :
Créer un fichier avec des données aléatoires ;
Installer un périphérique virtuel chiffré avec AES (Advanced Encryption Standard) avec mot de passe ;
Construire un système de fichiers Reiser sur ce périphérique virtuel ;
Le monter avec les fonctions des ACL.
Votre installation de Fedora Core 2, par défaut, sera configurée pour loop, cryptoloop et aes, mais il y a fort peu de chances que vous ayez tous ces modules chargés. Donc, il faut exécuter les commandes suivantes pour les charger (vous devez être root) :
# modprobe loop # modprobe cryptoloop # modprobe aes |
Créez ensuite un répertoire pour stocker les fichiers. Le système de fichiers Reiser exige plus d'espace que le système de fichiers ext3.
# mkdir /home/diskimg # cd /home/diskimg |
Au lieu de créer un fichier initialisé avec des zéros, comme vous l'avez fait avec le système de fichiers ext3, celui-ci va contenir des bits aléatoires, ce qui ajoutera un peu plus de sécurité.
# dd if=/dev/urandom of=disk-aes count=102400 |
Puisque nous devons chiffrer le périphérique virtuel, il faut utiliser losetup. Une invite vous demandera un mot de passe, dont vous devrez vous rappeler quand vous monterez le périphérique.
# losetup -e aes /dev/loop1 ./disk-aes Password: |
Cette étape est nouvelle également. Au lieu de formater le fichier directement, vous formaterez le périphérique virtuel, mais le fichier restera chiffré. Là encore, comme une invite vous demande si vous voulez continuer, saisissez juste y.
# mkfs -t reiserfs /dev/loop1 mkfs.reiserfs 3.6.13 (2003 www.namesys.com) A pair of credits: Elena Gryaznova performed testing and benchmarking. The Defense Advanced Research Projects Agency (DARPA, www.darpa.mil) is the primary sponsor of Reiser4. DARPA does not endorse this project; it merely sponsors it. Guessing about desired format.. Kernel 2.6.8-1.521 is running. Format 3.6 with standard journal Count of blocks on the device: 12800 Number of blocks consumed by mkreiserfs formatting process: 8212 Blocksize: 4096 Hash function used to sort names: "r5" Journal Size 8193 blocks (first block 18) Journal Max transaction length 1024 inode generation number: 0 UUID: 435e3495-5e2e-489d-bf55-1b5f9a44b670 ATTENTION: YOU SHOULD REBOOT AFTER FDISK! ALL DATA WILL BE LOST ON '/dev/loop1'! Continue (y/n):y Initializing journal - 0%....20%....40%....60%....80%....100% Syncing..ok Tell your friends to use a kernel based on 2.4.18 or later, and especially not a kernel based on 2.4.9, when you use reiserFS. Have fun. ReiserFS is successfully created on /dev/loop1. |
Créez le point de montage /fs et montez ce périphérique. Notez que vous ajouterez l'option acl également. De plus, une invite vous demandera un mot de passe :
# mkdir /fs # mount -o loop,encryption=aes,acl ./disk-aes /fs Password: |
Très bien. Maintenant, jetez un coup d'œil à la commande mount. Elle devrait apparaître sous la forme du système de fichiers Reiser, chiffré, utilisant les ACL. Notez qu'elle affiche loop2. Le montage a été effectué sur /dev/loop2, c'est-à-dire juste au dessus de ce qu'a spécifié losetup, /dev/loop1.
$ mount /home/diskimg/disk-aes on /fs type reiserfs (rw,loop=/dev/loop2,encryption=aes,acl) |
Les ACL (Access Control Lists) vous permettent d'avoir un contrôle plus précis sur les permissions d'accès. Avec le système de permissions rwx, vous ne pouvez pas facilement changer les droits sans créer de nouveaux groupes pour gérer les utilisateurs. Avec les ACL, vous pouvez définir des permissions utilisateur sans créer un groupe, et les utilisateurs peuvent ajouter ou supprimer des accès.
Ces droits sont définis avec la commande setfacl. La commande ci-dessous donnera aux utilisateurs donkey, chirico et bozo2 un accès au nouveau système de fichiers que nous avons monté. Là encore, je pars du principe que vous utilisez Fedora Core 2 ou une distribution compatible avec les ACL :
# setfacl -R -m d:u:donkey:rwx,d:u:chirico:rwx,d:u:bozo2:rwx /fs |
Créez ensuite quelques répertoires comme si vous étiez un des utilisateurs. L'exemple qui suit a été créé en tant qu'utilisateur chirico :
$ mkdir /fs/one $ touch /fs/one/stuff $ ls -l /fs/one/stuff -rw-rw----+ 1 chirico chirico 0 Sep 3 17:48 /fs/one/stuff |
Notez le signe plus (+) à la dernière ligne. Il nous donne quelques indications sur l'utilisateur qui a accès. Donc, en tant qu'utilisateur chirico, je peux exécuter la commande getfacl :
$ getfacl /fs/one/stuff getfacl: Removing leading '/' from absolute path names # file: fs/one/stuff # owner: chirico # group: chirico user::rw- user:chirico:rwx #effective:rw- user:donkey:rwx #effective:rw- user:bozo2:rwx #effective:rw- group::r-x #effective:r-- mask::rw- other::--- |
Nous constatons à présent que donkey, chirico et bozo2 ont des droits effectifs sur ce fichier. chirico a assez de droits pour supprimer bozo2 :
$ setfacl -x u:bozo2 /fs/one/stuff $ getfacl /fs/one/stuff getfacl: Removing leading '/' from absolute path names # file: fs/one/stuff # owner: chirico # group: chirico user::rw- user:chirico:rwx user:donkey:rwx group::r-x mask::rwx other::--- |
Voilà un mince aperçu de ce que l'on peut faire avec les ACL. Pour plus d'informations, consultez quelques-unes des références ci-dessous.
Cet article vous initiera au noyau 2.6 si vous utilisez actuellement Red Hat 8® ou 9. Vous serez peut-être amené à y jeter un coup d'œil pour voir de quoi il est question. Si vous décidez de faire la mise à niveau, vous devrez configurer votre noyau ainsi :
CONFIG_BLK_DEV_LOOP CONFIG_BLK_DEV_CRYPTOLOOP CONFIG_CRYPTO_AES_586 |
Cette modification s'effectue dans le fichier .config (vous pouvez télécharger mon fichier de configuration ici). Il suffit de chercher kernel-2.6.8.1-i686-chirico-reiserfsacl.config dans le tar.gz.
Outre la mise à niveau de votre noyau, vous aurez besoin de la dernière version de The Linux utilities. Actuellement, aucun correctif n'est nécessaire pour cette version. Dans le passé, il y a eu un correctif, mais cette version fonctionne très bien pour ce qui me concerne.
Vous aurez aussi besoin des Reiser tools.
Regardez les astuces 12, 22 et 91 pour savoir comment utiliser ssh avec rsync. Vous pouvez créer un système de fichiers virtuel sur un serveur, puis le copier sur votre ordinateur portable. Lorsque vous travaillez sur votre portable, synchronisez vos changements avec rsync.
Cet article traite de manière plus approfondie l'ajout et la suppression d'utilisateurs.
Un PDF de Andreas Graenbacher.
De Mark Mitchell, Jeffrey Oldham et Alex Samuel, de CodeSourcery LLC, publié par New Riders Publishing, ISBN 0-7357-1043-0, Première édition, Juin 2001. Cet ouvrage est gratuit et vous pouvez le consulter en ligne. Le chapitre 6 décrit les périphériques virtuels.
De W. Michael Petullo, 23 juillet 2003.
De Ryan T. Rhea.
Il s'agit d'une alternative à yacc compacte et sûre par rapport aux threads. Elle est utilisée dans le projet sqlite.
Lisez les suggestions faites par les uns et les autres. J'ai commencé une liste et j'y ajouterai les idées d'autres développeurs, lecteurs et de personnes qui semblent avoir de bonnes connaissances sur le sujet.
Astuces pour MySQL.
Astuces pour utiliser Comcast Email avec un PC sous Linux.
Mike Chirico, père de triplés (toutes des filles), vit aux États-Unis près de Philadelphie (Pennsylvanie). Il travaille sous Linux depuis 1996. Titulaire d'un Master en informatique et mathématiques de l'université de Villanova, il a occupé des emplois liés à l'informatique à Wall Street ainsi qu'à l'université de Pennsylvanie. Son héros est Paul Erdos, un brillant théoricien des nombres dont on connaissait l'ouverture vers les autres et la disponibilité pour collaborer avec tous. On peut consulter les notes de Mike sur sa page d'accueil : souptonuts.