Guide d'installation et de configuration de Linux | ||
---|---|---|
Précédent | Chapitre 6. Administration du système de base | Suivant |
Linux fournit des mécanismes très puissants permettant de créer des fichiers spéciaux de périphérique de type bloc virtuels, et d'indiquer les données qui seront accédées au travers de ces fichiers. Cela permet de manipuler des systèmes de fichiers stockés sur un fichier. Linux permet également de réaliser des agrégats de volumes. Ces agrégats peuvent ensuite être accédés via différentes techniques, par exemple pour réaliser de la réplication de données ou tout simplement pour simuler un périphérique de très grande taille. Ils permettent également de réaliser à la volée des opérations de chiffrement sur les données écrites, et de les déchiffrer en lecture. Ainsi, ces mécanismes d'agrégation sont utilisés pour gérer les volumes de manière beaucoup plus souple que les mécanismes de partitionnement classiques et pour créer des systèmes de fichiers chiffrés à l'aide des algorithmes cryptographiques du noyau. Nous allons présenter tous ces mécanismes dans les sections suivantes.
Linux permet de stocker des systèmes de fichiers dans des fichiers image et de les manipuler de manière transparente, grâce à un mécanisme de périphériques de type bloc virtuel. Le principe est d'associer le fichier à l'un de ces périphériques, et d'utiliser simplement le fichier spécial de périphérique correspondant comme un fichier spécial de périphérique de type bloc classique. Il est ainsi possible de construire une image de systèmes de fichiers de manière tout à fait transparente, et d'accéder aux données stockées dans une image de CD-ROM de manière tout aussi facile.
Les fichiers spéciaux de périphérique utilisés pour manipuler les fichiers images sont les fichiers /dev/loopX, où X est un numéro allant de 0 à 7. Ces fichiers ne sont utilisables que si l'option « Loopback device support » du menu « Block devices » a été activée dans la configuration du noyau.
L'association entre le périphérique de type bloc virtuel et le support des données peut être réalisée à l'aide de la commande losetup. La syntaxe la plus simple de cette commande est la suivante :
losetup /dev/loopX fichieroù loopX est le fichier spécial de périphérique de type bloc virtuel à utiliser, et fichier est le fichier dans lequel les données de ce périphérique doivent être stockées. Une fois cette association faite, on peut utiliser ce périphérique comme un véritable périphérique. Ainsi, pour créer un système de fichiers dans un fichier image de 10 Mo, on procédera comme suit :
Note : La commande dd permet de copier un certain nombre de blocs, ici 10240 (option
count
) de 1024 octets (taille indiquée par l'optionbs
) du fichier spécial de périphérique /dev/zero dans le fichier image. Cette commande a déjà été présentée dans le chapitre d'installation pour réaliser une copie du secteur de boot principal du disque dur.En réalité, les commandes de création de systèmes de fichiers peuvent également créer directement les systèmes de fichiers dans des fichiers images. La manière classique de procéder a toutefois été présentée ici pour la bonne compréhension du mécanisme de gestion des fichiers images.
Le montage d'un système de fichiers placé dans l'image disque est ensuite
réalisable de manière tout à fait classique, en utilisant le fichier spécial de périphérique
/dev/loopX adéquat dans la commande mount. Toutefois,
cette commande permet de réaliser le montage d'une image de manière simplifiée grâce à son option
loop
. Celle-ci permet de configurer le périphérique virtuel image de manière
automatique avant de réaliser le montage. Elle prend donc en paramètre le fichier spécial
de périphérique virtuel à utiliser, ainsi que le chemin sur le fichier image contenant le système
de fichiers. Ainsi, pour monter une image de CD-ROM, vous pouvez utiliser la commande suivante :
Lorsque l'on n'a plus besoin du périphérique de type bloc virtuel, il est possible de supprimer l'association avec le support de données simplement avec la commande suivante :
losetup -d /dev/loopXoù X est toujours le numéro du fichier spécial de périphérique virtuel. Lorsque l'on utilise l'option
loop
de la commande mount, cette opération
est réalisée automatiquement par la commande umount et ne doit plus être
effectuée manuellement.
Les agrégats de volumes de Linux permettent de construire un périphérique virtuel constitué d'un certain nombre de volumes de données. Ceux-ci peuvent être regroupés pour réaliser un volume de grande taille, ou mis en parallèle afin de répliquer les données sur plusieurs disques par exemple. Il est donc possible, grâce à cette fonctionnalité, de regrouper plusieurs disques durs ou plusieurs partitions en une seule partition logique, ou au contraire de subdiviser de manière fine des partitions ou des disques existants. De même, il est possible de prendre en charge au niveau logiciel les fonctionnalités RAID normalement disponibles uniquement avec du matériel spécialisé. Nous ne présenterons toutefois pas ces fonctionnalités ici.
La réalisation des agrégats de volumes se fait à l'aide de l'outil dmsetup. Cet outil peut être récupéré sur le site de Redhat s'il n'est pas fourni avec votre distribution. Son installation se fait par compilation des sources, par exécution des commandes suivantes dans le répertoire des sources :
./configure make make install
La principale commande de dmsetup
est celle qui permet de créer un nouvel agrégat. Cela se fait simplement grâce à l'option
create
:
dmsetup create agrégat définitionoù agrégat est le nom de l'agrégat et définition est le nom d'un fichier contenant la définition de cet agrégat. Si vous ne fournissez pas ce paramètre, dmsetup attendra que vous le définissiez en ligne de commande.
La définition d'un agrégat se fait de manière générale à l'aide de plusieurs lignes, à raison d'une ligne par composante de l'agrégat. Chaque ligne a la forme suivante :
début taille méthode argumentsdébut est le secteur de début de la plage de secteurs de l'agrégat qui seront stockés dans la composante. taille est le nombre de secteurs de cette plage. méthode est la méthode d'agrégation utilisée, elle est suivie par des options qui lui sont spécifiques. La méthode la plus classique est sans doute linear, qui permet de stocker des données de l'agrégat dans les secteurs correspondants de la composante. Dans le cas de la méthode linéaire, ces secteurs sont spécifiés simplement avec le nom du fichier spécial de périphérique contenant les secteurs, et le numéro du premier secteur à partir duquel la composante sera stockée.
Par exemple, pour créer un agrégat des deux partitions /dev/hda2 et /dev/hdb1, respectivement de tailles 16579080 et 59665410 secteurs, il suffit d'utiliser les deux lignes suivantes :
On constatera que le secteur de départ dans l'agrégat de la deuxième composante est le secteur suivant le dernier secteur défini par la première composante. De manière générale, il n'est pas possible de définir des trous dans un agrégat. La totalité des deux partitions est utilisée dans cet exemple, pour créer un volume de taille totale 40 Go environ (pour rappel, un secteur de disque dur fait 512 octets, les deux partitions de cet exemple font donc environ 8 et 32 Go).Une fois l'agrégat créé, un fichier spécial de périphérique portant le nom de l'agrégat doit apparaître dans le répertoire /dev/mapper/. Ce fichier spécial de périphérique peut être utilisé comme n'importe quel fichier spécial de périphérique, pour y créer un système de fichiers, pour le monter et pour le démonter. Par exemple, pour créer un agrégat group0 avec les définitions précédentes, il suffit d'exécuter la commande suivante :
où group0.def est le fichier contenant les deux lignes définissant les composantes vues ci-dessus. La création et le montage du système de fichiers se font ensuite avec les commandes suivantes : où /mnt/group/ est le nom du répertoire où le système de fichiers agrégé doit être monté.
Lorsqu'un agrégat n'est plus utilisé, il peut être
supprimé à l'aide de l'option remove
de dmsetup
dmsetup remove agrégatCela ne supprime bien entendu pas les données, mais détruit l'association entre les composantes de cet agrégat.
Note : Les fonctionnalités d'agrégation de volumes ne sont disponibles que si les options « Multiple devices driver support (RAID and LVM) », « Device mapper support » et « Crypt target support » du noyau ont été activées dans le menu « Multi-device support (RAID and LVM) » du programme de configuration du noyau.
dmsetup utilise le fichier spécial de périphérique /dev/mapper/control pour communiquer avec le noyau. Vous devrez donc créer ce fichier si votre distribution ne le fournit pas. Pour cela, vous pouvez exécuter le script devmap_mknot.sh fourni dans le répertoire scripts/ des sources de dmsetup. Ce script permet également de créer le répertoire /dev/mapper/ si celui-ci n'existe pas.
Il est possible de créer des systèmes de fichiers chiffrés afin de garantir la confidentialité des données qui y sont stockées. Ces systèmes de fichiers sont chiffrés à la volée par le noyau avec des algorithmes de chiffrement très puissants, que l'on paramètre avec une clef de chiffrement. Cette clef doit bien entendu rester secrète, faute de quoi tout ce travail de chiffrement devient inutile. Le chiffrement et le déchiffrement sont réalisés de manière complètement transparente par le noyau lors des accès aux répertoires et aux fichiers du système de fichiers, qui apparaît donc en clair lorsqu'on l'utilise. La différence est donc que le système de fichiers reste illisible pour tous les autres ordinateurs, ou pour tous les autres utilisateurs s'ils n'ont pas la clef de décryptage et que le système de fichiers n'est pas monté (rappelons que le mécanisme des droits Unix permet à un utilisateur d'interdire aux autres utilisateurs de consulter ses données).
Pour créer un tel système de fichiers, il est nécessaire de créer un volume agrégé, et d'utiliser un algorithme de chiffrement comme algorithme d'agrégation. Ceci se fait simplement en indiquant que les composantes de l'agrégat utilisent la technique d'agrégation crypt. Cette technique est semblable à la technique linear, à ceci près qu'elles permettent de chiffrer les données à la volée. L'algorithme de chiffrement utilisé peut alors être spécifié et prendre en paramètre une clef privée, qui doit être fournie à chaque fois que l'agrégat est redéfini, faute de quoi les données resteront indéchiffrables. Pour des raisons de sécurité, un vecteur d'initialisation peut être utilisé afin de rendre plus difficiles les tentatives de décryptage par la force brute. Ce vecteur d'initialisation est ajouté à la clef de chiffrement et permet ainsi d'obtenir des données chiffrées différentes pour deux systèmes de fichiers même si les clefs utilisées sont identiques. Dans l'implémentation actuelle, le vecteur d'initialisation utilisé est le numéro du secteur chiffré, ce qui n'est pas la panacée étant donné que ce numéro est prédictible, mais c'est déjà mieux que rien.
La technique d'agrégation crypt prend en paramètre l'algorithme de chiffrement à utiliser, la clef privée à utiliser pour chiffrer le volume agrégé, un décalage à ajouter au numéro du secteur pour déterminer le vecteur d'initialisation, le fichier spécial de périphérique sur lequel les données chiffrées seront écrites, et le numéro du secteur de ce périphérique à partir duquel les données seront écrites. Les décalages fournis permettent de n'utiliser qu'une partie d'un périphérique de type bloc pour stocker les données chiffrées. En général, ces valeurs seront nulles, car les données sont souvent stockées sur la totalité du périphérique hôte.
Ainsi, la définition d'une composante de l'agrégat chiffré se fait selon la syntaxe suivante :
début taille crypt algorithme clef décalage périphérique origineoù début et taille définissent la composante dans l'agrégat, algorithme et clef l'algorithme de chiffrement et la clef privée utilisée, décalage le décalage pour le vecteur d'initialisation, périphérique le fichier spécial de périphérique dans lequel les données chiffrées devront être écrites, et origine le secteur de départ dans ce périphérique à partir duquel les données seront écrites.
Les algorithmes utilisables sont les algorithmes de chiffrement inclus dans la configuration du noyau, dont vous pourrez trouver la liste et les paramètres dans le fichier /proc/crypto. Pour chaque algorithme de chiffrement, vous pouvez indiquer si vous désirez utiliser un vecteur d'initialisation ou non en ajoutant un suffixe à leur nom. Le suffixe ecb signifie qu'il n'y a pas de vecteur d'initialisation, et le suffixe plain signifie que le vecteur utilisé est le numéro de secteur. Bien entendu, vous devriez utiliser plain, en attendant qu'une meilleure technique ne soit mise au point. Ainsi, le nom d'algorithme des-plain indique que l'algorithme DES doit être utilisé avec un vecteur d'initialisation. La clef de cet algorithme doit faire 64 bits (soit huit octets).
Une fois l'agrégat défini, celui-ci peut être accédé comme un périphérique de type bloc classique, via son fichier spécial de périphérique dans le répertoire /dev/mapper/. La création du systèmes de fichiers se fait de la même manière que pour les autres fichiers spéciaux de type bloc. Par exemple, pour chiffrer la partition /dev/hda2 (dont la taille est supposée être de 10000000 blocs) avec l'algorithme AES, vous devrez définir l'agrégat suivant :
où clef est une clef de taille comprise entre 16 et 32 octets. Si cet agrégat a été nommée cr0, vous pourrez ensuite créer le système de fichiers simplement avec la commande suivante : et le monter dans le répertoire /mnt/secure/ avec une commande telle que celle-ci :Enfin, il est possible d'utiliser un fichier en tant que périphérique de stockage des données chiffrées. Pour cela, il faut associer ce fichier à un fichier de type bloc virtuel à l'aide de la commande losetup. Ce fichier peut ensuite être utilisé pour définir un agrégat, comme n'importe quel autre fichier spécial de périphérique.
Précédent | Sommaire | Suivant |
Maintenance des systèmes de fichiers | Niveau supérieur | Configuration des terminaux virtuels |