Fichiers et répertoires

by Robert L.E. BILLON


1 Les fichiers

1.1 Les noms de fichiers

Les systèmes de fichiers ext2fs et ext3fs de Linux admettent des noms de fichiers ayant jusqu'à 256 caractères. L'extension du nom de fichier est facultative, elle est en général choisie en relation avec le logiciel utilisé. Par exemple, monprog.c s'applique a un source C. Linux distingue tous les caractères ASCII, par exemple les fichiers TUTU, Tutu et tutu sont distincts car majuscules (upcase) et minuscules (lowcase) ne sont pas équivalents.

1.2 Les attributs des fichiers

Les fichiers peuvent avoir trois types d'attributs non mutuellement exclusifs:

read/write
Autorisé en lecture et écriture (rw-)
read only
Autorisé en lecture seule (r--)
exec
Exécutable (--x)

Ces attributs sont définis pour trois types d'utilisateurs:

owner
Le propriétaire du fichier
group
Le groupe auquel appartient le propriétaire du fichier
others
Le reste du monde

2 Les liens (links)

Le principe des links autorise un fichier à avoir plusieurs noms. Rappelons d'abord comment fonctionne le système de fichiers de Linux. Linux repère physiquement les données par des i-nodes. Cet i-node qui est en fait un simple numéro est le vrai nom des données. Il est unique et ne peut pas être partagé par deux fichiers distincts. Une étiquette appelée nom de fichier (filename) pointe sur l'i-node.

On distingue deux types de links.

2.1 hardlink

Créé par la commande ln , il est équivalent à créer une nouvelle étiquette pointant vers un i-node.
Si nous avons un fichier nommé lotus, et que nous entrons la commande

  ln lotus iris  

Nous pouvons maintenant accéder à ce fichier sous l'un ou l'autre nom et ces deux noms sont parfaitements équivalents. Il existe un seul exemplaire du fichier, la création d'un hard link ne prend pas de place sur le disque. Si nous effaçons lotus, nous pouvons encore accéder au fichier par iris. L'effacement du dernier link supprime le fichier. Tous les hard links d'un fichier doivent être sur le même disque physique, les links sur des répertoires peuvent générer des problèmes dans certains cas . Ainsi il est souvent préférable d'utiliser les 'symbolic links'.

2.2 symbolic link

Créé par la commande ln -s , il est équivalent à créer une nouvelle étiquette pointant vers un nom de fichier, sans se référer à l'i-node. Un symbolic link est aussi un alias de fichier, mais dans ce cas le fichier et les links sont distincts, si on efface le fichier les links n'ont plus de signification. Entrons la commande

  ln -s   lotus  iris 

Si maintenant nous tapons

  ls -l 

le link est clairement affiché en fin de ligne

   .................... lotus
   .................... iris  ->  lotus 

Nous pouvons accéder au fichier sous l'un ou l'autre nom, par contre si nous effaçons lotus, iris devient un link invalide et n'autorise plus l'accès au fichier.

3 Les fichiers spéciaux

En fait sous Linux tout est fichier, nous distinguerons principalement:

3.1 Les périphériques

Pour communiquer avec un périphérique on écrit dans un fichier spécial qui représente ce périphérique, par exemple /dev/fd0 pour écrire ou lire sur le floppy.

3.2 Les 'pipes' ou tubes

Ils sont utiles pour enchainer des commandes, par exemple : ls|lp , ls envoie les données dans l'entrée du pipe ( | ) et lp les reprend a la sortie, le répertoire ne sera pas affiché mais dirigé vers l'imprimante.

4 L'arborescence des répertoires

Linux voit ses disques comme une arborescence unique. Une partition contient la racine ( / ) du système de fichiers, d'autres partitions, disque, floppy, peuvent être accrochés a des répertoires au moyen de la commande mount. On y accède ensuite de facon transparente, exactement comme a un fichier. La structure standard des répertoires est décrite par le Filesystem Hierarchy Standard (FHS), auquel se conforment la plupart des distributions Linux.

fhs.png

Cette arborescence comporte un certain nombre de répertoires et sous répertoires. Ils peut y avoir des variations d'une distribution à une autre, toutefois les répertoires / , /bin, /sbin, /dev, /etc/, /usr , /var , /proc, /root, sont toujours présents et constituent la base de la hiérarchie des fichiers.

/
Racine ou root: racine du système de fichiers, ne contient habituellement aucun fichier.
/boot
Contient la base même du système, kernels et boot maps, ainsi que les fichiers de configuration pour grub et les fichiers de ressources pour lilo.
/bin
Binaires exécutables des utilitaires de base du système. Commandes pour démarrer en 'single'. Ces binaires sont compilés en dynamique, ils nécessitent donc la présence des 'libraries' correspondantes.
/sbin
Contraction de Static Binaries. Ces programmes sont donc autonomes. Programmes nécessaires au fonctionnement du système, beaucoup sont réservés à 'root' : mkfs, fsck, lilo, agetty
/lib
'Shared libraries' (libc.so, libtermcap.so, ...). Librairies partagées nécessaires aux programmes de démarrage situés dans /bin Contient aussi les modules du kernel.
/dev
Descripteurs de périphériques (devices).
/etc
Fichiers de configuration, données pour les programmes: passwd, group, inittab, fstab, profile, ..., avec ses différents sous-répertoires, dont :
/rc.d
Scripts 'run commands': rc.S, rc.local, rc.keymap, ...
/skel
'Skeleton'. Squelette des scripts de configuration 'users': .inputrc, .bash_profile... recopiés dans le HOMEDIR d'un 'new user' à la création d'un nouveau compte avec la commande 'adduser'.
/X11
Configuration pour Xwindow, Xfree86, ...
/modules
Fichiers de configuration des modules du kernel
/usr
Contraction de Unix System Resources. Contient l'essentiel des ressources de votre système. C'est probablement le répertoire occupera le plus de place sur vos disques. (A moins que vous ayez un répertoire /home obèse). Contient une arborescence complète de données que les 'users' peuvent se partager. /usr peut être le point de montage d'un disque autre que celui contenant la racine. Il peut être monté en réseau et partagé entre plusieurs machines. Ses principaux sous-répertoires sont:
/include
Fichiers 'headers' .h pour gcc: print.h, malloc.h, gpm.h, ...
/lib
'Libraries' associées aux exécutables de /usr/bin
/lib/X11
Lien symbolique vers /usr/X11R6/lib/X11 /kbd/keytables, consolefonts, ...
/share
Ressources partagées pour les exécutables dans /usr/bin
/bin
Contient les exécutables, compilés en statique, des programmes utilisables sur le système. Ce sont les utilitaires associés à votre distribution et installés par votre gestionnaire de paquetages.
/bin/X11
Lien symbolique vers /usr/X11R6/bin qui contient les exécutables pour Xwindow
/local
Reproduit l'arborescence de /usr mais il n'est pas géré par le gestionnaire de paquetages. Contient les programmes installés à partir de sources ou disposant de leur propre procédure d'installation. Programmes spécifiques au système ou au site et indépendants d'une distribution.
/src
Sources des applications installées, /usr/src/linux contient les sources du kernel
/man
Manuels en ligne: pages man
/spool
Fichiers intermédiaires: cron, lpd, uucp, mqueue, gestion des imprimantes
/etc
Fichiers configuration pouvant être partagés entre plusieurs machines, généralement liens symboliques vers /etc/...
/X11R6
Dédié à Xwindow, un lien symbolique est habituellement créé vers /usr/X11, parfois /usr/X386 ,depuis ce répertoire
/X11R6/bin
Exécutables pour le système Xwindow
/X11R6/lib
Librairies pour les programmes situés dans /usr/X11R6/bin
/X11R6/lib/X11
Librairies utiles au démarrage du serveur Xwindow
/X11R6/include/X11
Fichiers 'header' pour développement d'applications X11
/var
Données changeant souvent: logs de l'activité système, queues, crontabs des users, games scores, ... Ses principaux sous-répertoires sont:
/lock
Fichiers de verrouillage: lock, LCK..
/log
Journal de l'activité système
/spool
Files d'attente
/spool/cron
Entrées de crontab pour l'automatisation des tâches
/spool/lpd
Fichiers en attente d'impression
/spool/mail
Mailboxes et messages des 'users'
/spool/smail
Fichiers en attente de distribution par 'smail'
/mnt
Point de montage par la commande 'mount' , avec différents sous- répertoires:
/floppy
pour le floppy, par exemple /dev/fd0
/cdrom
pour le CDROM ou DVD
/disk
pour un disque amovible (mémoire USB, carte SD)
/media
Dans les distributions basées sur Debian, point de montage des supports de données amovibles
/tmp
Fichiers temporaires
/root
Répertoire personnel de l'administrateur système, programmes et scripts écrits par root pour le système.
/home
Racine des répertoires personnels des 'users'
/opt
Répertoire des logiciels optionnels, il a sa propre structure, chaque application y a son propre sous-répertoire lequel contient tout ce qui est nécessaire à son exécution.
/proc
Réservé au système. Le kernel place ici des infos relatives à l'état du systéme et des process. Il n'occupe aucune place sur le disque.
/lost+found
Strictement réservé au système,utilisé pour la reconnection d'inodes en cas de crash pendant une création de fichier.

5 Permissions et droits d'accès

5.1 Les droits d'accès vus avec la commande ls -l

Exemple pour un répertoire

-:normal file,b:block_dev,c:char_dev,d:directory,l:link
| 
|            number of hard links               dirname 
|            |                                  |
drwxr-xr-x   2 f3wm   users   1024 Sep 30 11:42 wshop/

Exemple pour un fichier

normal file    owner  group     size            filename
|              |      |         |               |   
-rwxr-xr-x   1 f3wm   users  14943 Oct 01 16:46 jstarrc
  |  |  |                          |
  |  |  others:read,execute        last modif date,time
  |  group:read,execute
  owner:read,write,execute

5.2 Les bits de permission pour la commande chmod

On entend par 'user' un utilisateur potentiel qui justifie d'une ID(entification) par l'un des moyens suivants : password, su + password, setuid, ... Cela l'autorise à bénéficier des permissions plus ou moins étendues qui lui sont accordées.

  
    USER (u)          GROUP (g)         OTHERS (o)  
read write exec    read write exec     read write exec  
400   200   100    40    20    10      4     2     1   
valeurs en octal

 

Exemple: 755 = 400+200+100 + 40+10 + 4+1  = -rwxr-xr-x
                    |          |      |
                    |          |      others: read+execute (r-x)
                    |          group: read+execute (r-x)
                    user: read+write+execute (rwx)

5.3 Les permissions d'accès spéciales

Elles peuvent être attribuées seulement par 'root' ou par le 'owner' du fichier ou répertoire. Les valeurs en octal sont respectivement 4000, 2000, 1000 . Les bits setuid et setgid définissent ce que l'on appelle les droits d'accè étendus. Ceux-ci permettent, le temps d'un traitement, de donner à un 'user' les droits qui sont normalement ceux du 'owner' .

setuid
Commande chmod u+s ou chmod 4xxx. Le 'user' peut exécuter le fichier avec les permissions 'owner'. Par exemple pour le fichier /etc/passwd, ls -l affiche -rwsr-xr-x, x est remplacé par s dans les permissions user. Ainsi un 'user' peut changer son password avec les droits de root, une fois l'opération effectuée il reprend ses droits normaux. Quand le 'user' n'a pas la permission 'execute', alors s est remplacé par S . Les programmes qui ont recours à setuid sont en général de petite taille afin de limiter la durée de la période de vulnérabilité
setgid
Commande chmod g+s ou chmod 2xxx. Le groupe peut exécuter le fichier avec les permissions du 'owner'. La commande ls -l affiche -rwxr-sr-x, x est remplacé par s dans les permissions du groupe. Quand un répertoire est setgid, tous les fichiers créés dans ce répertoire appartiennent au même groupe que le répertoire. Utilisé quand plusieurs personnes travaillent sur un projet commun et appartiennent au groupe dédié à ce projet. Leur répertoire commun est setgid et ils créent leurs fichiers dans ce répertoire avec les mêmes droits. Chaque membre du groupe peut alors écrire ou détruire n'importe quel fichier. Si le groupe n'a pas la permission 'execute', s est remplacé par S . Le bit setgid est parfois utilisé sur des fichiers non exécutables dans le but de créer un "verrou coopératif entre processus".
sticky bit
Commande chmod u+t ou chmod 1xxx . Le sticky bit concerne principalement les répertoires. Si un 'user' a la permission 'execute' sur un répertoire, il peut faire un 'rm' de n'importe quel fichier dont il n'est pas 'owner'. Avec le sticky bit positionné, seulement le 'owner' du fichier et root peuvent l'effacer. Ainsi, pour le répertoire /tmp dans lequel tout le monde peut écrire, si le sticky bit est positionné, chaque 'user' ne peut écrire ou détruire que les fichiers qui lui appartiennent. La commande ls -l affiche drwxrwxrwt , x est remplacé par t dans les permissions 'others'(autres).

Le bit d'accès spécial est placé en tête du nombre octal qui définit les permissions.

Exemple:

1755 = 1000 + 400+200+100 + 40+10 + 4+1  = drwxr-xr-t
        |          |          |      |
        sticky     |          |    others: read+execute 
                   |        group: read + execute (r-x)
                  user: read + write + execute (rwx)

Note : L'accès en lecture d'un répertoire donne le droit de consulter la liste de ses entrées, l'accès en écriture celui d'y créer ou supprimer des fichiers, et l'accès en exécution de le traverser et notamment d'en faire le répertoire courant avec la commande cd. Pouvoir traverser un répertoire sans le lire donne le droit d'accéder à celles de ses entrées dont on connait le nom, mais pas de les trouver si on ignore leur existence.

6 Stockage temporaire

Trois répertoires sont utilisés pour le stockage temporaire de données et chacun a ses spécificités.

/tmp
Les permissions sont établies afin que n'importe qui puisse écrire dans ce répertoire. Cependant, une fois qu'un fichier a été créé, les autres users ne peuvent y accéder. Son contenu est effacé à chaque reboot du système.
/var/tmp
Les mêmes spécificités que /tmp mais avec une différence importante, il est persistant au reboot.
/dev/shm
Ce répertoire n'est pas stocké sur disque, mais en RAM. Ainsi, non seulement son contenu a disparu au reboot, mais aucune méthode d'autopsie ultérieure ne saurait le lire à nouveau.



Bibliographie :
Debian - Cahiers de l'Admin, Raphaël Hertzog, Editions Eyrolles, 2005, ISBN 9782212116397
Linux Journal, novembre 2010 p.32, article par Kyle Rankin


    
File: linux.html - Robert L.E. Billon, 2000-04-13 - Last update: 2010-11-25