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.
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
|
|