Linux est résolument multi-utilisateur ; il est donc nécessaire de prévoir un système de permissions contrôlant les opérations autorisées pour chacun sur les fichiers et répertoires, recouvrant toutes les ressources du système (y compris les périphériques : sur un système Unix, tout périphérique est représenté par un fichier ou répertoire). Ce principe est commun à tous les Unix mais un rappel est toujours utile, d'autant qu'il existe quelques usages avancés méconnus et relativement intéressants.
9.3.1. Owners and Permissions
Chaque fichier ou répertoire dispose de permissions spécifiques pour trois catégories d'utilisateurs :
son propriétaire (symbolisé par u
comme user) ;
son groupe propriétaire (symbolisé par g
comme group) — représentant tous les utilisateurs membres du groupe ;
les autres (symbolisés par o
comme other).
Three basic types of rights can be combined:
lecture (symbolisé par r
comme read) ;
écriture (ou modification, symbolisé par w
comme write) ;
exécution (symbolisé par x
comme eXecute).
Dans le cas d'un fichier, ces droits sont faciles à interpréter : l'accès en lecture permet d'en consulter le contenu (et notamment de le copier), l'accès en écriture de le modifier et l'accès en exécution permet de tenter de l'exécuter (ce qui ne fonctionnera que s'il s'agit d'un programme).
Un répertoire est traité différemment. L'accès en lecture 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 de s'y rendre 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 connaît le nom, mais pas de les trouver si on ignore leur existence ou leur nom exact.
Trois commandes manipulent les permissions associées à un fichier:
chown utilisateur fichier
affecte un nouveau propriétaire à un fichier;
chgrp groupe fichier
opère sur son groupe propriétaire;
chmod droits fichier
intervient sur ses droits.
Il existe deux manières de présenter les droits ; parmi elles, la représentation symbolique, sans doute la plus simple à comprendre et mémoriser, met en jeu les lettres symboles déjà citées. Pour chaque catégorie d'utilisateurs (u
/g
/o
), on peut définir les droits (=
), en ajouter (+
), ou en retrancher (-
). Ainsi, la formule u=rwx,g+rw,o-r
donne au propriétaire les droits de lecture, d'écriture et d'exécution ; ajoute au groupe propriétaire les droits de lecture et d'écriture ; et supprime le droit de lecture aux autres utilisateurs. Les droits non concernés par les opérations d'ajout ou de retranchement restent inchangés. La lettre a
, pour all, recouvre les trois catégories d'utilisateurs, de sorte que a=rx
donne aux trois catégories les mêmes droits (lecture et exécution, mais pas écriture).
La représentation numérique octale associe chaque droit à une valeur : 4 pour la lecture, 2 pour l'écriture et 1 pour l'exécution. On associe à chaque combinaison de droits la somme de ces chiffres, valeurs qu'on attribue ensuite aux différentes catégories d'utilisateurs en les mettant bout à bout dans l'ordre habituel (propriétaire, groupe, autres).
For instance, the chmod 754 file
command will set the following rights: read, write and execute for the owner (since 7 = 4 + 2 + 1); read and execute for the group (since 5 = 4 + 1); read-only for others. The 0
(zero) means no rights; thus chmod 600 file
allows for read/write rights for the owner, and no rights for anyone else. The most frequent right combinations are 755
for executable files and directories, and 644
for data files.
Pour représenter le cas échéant les droits spéciaux, on pourra préfixer à ce nombre un quatrième chiffre selon le même principe, sachant que les bits setuid
, setgid
et sticky
valent respectivement 4, 2 et 1. chmod 4754
associera donc le bit setuid
aux droits décrits précédemment.
On notera que l'utilisation de la notation numérique octale ne permet que de modifier en bloc l'ensemble des droits sur un fichier ; on ne peut pas l'utiliser pour se contenter d'ajouter par exemple le droit en lecture pour le groupe propriétaire, puisqu'il faut obligatoirement prendre en compte les droits existants et calculer la nouvelle valeur numérique correspondante.
9.3.2. ACLs - Access Control Lists
Many filesystems, e.g. Btrfs, Ext3, Ext4, JFS, XFS, etc., support the use of Access Control Lists (ACLs). These extend the basic features of file ownership and permission, described in the previous section, and allow for a more fine-grained control of each (file) object. For example: A user wants to share a file with another user and that user should only be able to read the file, but not write or change it.
For some of the filesystems, the usage of ACLs is enabled by default (e.g. Btrfs, Ext3, Ext4). For other filesystems or older systems it must be enabled using the acl
mount option - either in the mount
command directly or in /etc/fstab
. In the same way the usage of ACLs can be disabled by using the noacl
mount option. For Ext* filesystems one can also use the tune2fs -o [no]acl /dev/device
command to enable/disable the usage of ACLs by default. The default values for each filesystem can usually be found in their homonym manual pages in section 5 (filesystem(5)) or in mount(8).
After enabling ACLs, permissions can be set using the setfacl(1) command, while getfacl(1) allows one to retrieve the ACLs for a given object or path. These commands are part of the acl package. With setfacl
one can also configure newly created files or directories to inherit permissions from the parent directory. It is important to note that ACLs are processed in their order and that an earlier entry that fits the situation has precedence over later entries.
If a file has ACLs set, the output of the ls -l
command will show a plus-sign after the traditional permissions. When using ACLs, the chmod
command behaves slightly different, and umask
might be ignored. The extensive documentation, e.g. acl(5) contains more information.