Gestion des droits Linux
Connaître la gestion des droits est essentiel pour s’en sortir sous Linux. En effet il est vital pour la gestion des fichiers sur un serveur FTP par exemple ou pour tout partage ou système qui serait accessible par plusieurs utilisateurs.
I. Quelques notions
Avant tout, quelques termes qui seront rencontrés dans la suite de la lecture :
- Utilisateur : Utilisateur connecté au système. La liste des utilisateurs est disponible dans le fichier /etc/passwd
- Groupe : Groupe appartenant au système. La liste des groupes est disponible dans le fichier /etc/group
- Utilisateur Propriétaire (noté u comme user) : Utilisateur qui est en possession du fichier
- Groupe Propriétaire (noté g comme group): Groupe d’utilisateurs qui est en possession du fichier
- Autres Utilisateurs (noté o comme other): Utilisateurs qui ne sont ni propriétaire du fichier, ni faisant partie du groupe propriétaire.
- Tous (noté a comme all): Utilisateur propriétaire + Groupe propriétaire + Autres utilisateurs.
Quels sont les droits
Les droits ont deux sens différents s’ils sont appliqués à des fichiers ou des dossiers :
Droits des fichiers :
- Lecture (noté r) : on peut par exemple lire le fichier avec un logiciel.
- Écriture (noté w) : on peut modifier le fichier et le vider de son contenu.
- Exécution (noté x) : on peut exécuter le fichier s’il est prévu pour, c’est-à-dire si c’est un fichier exécutable (script, programme).
Droits des dossiers :
- Lecture (noté r) : il autorise l’affichage du contenu du répertoire (la liste des fichiers présents à la racine de ce répertoire).
- Écriture (noté w) : il autorise la création, la suppression et le changement de nom des fichiers qu’il contient, quels que soient les droits d’accès des fichiers de ce répertoire (même s’ils ne possèdent pas eux-mêmes le droit en écriture). Néanmoins le droit spécial sticky bit permet de passer outre ce comportement.
- Exécution (noté x) : il autorise l’accès (le traverser) au répertoire.
On appelle parfois r, w et x des flags. Sur un fichier donné, ils doivent être définis pour son propriétaire, son groupe, mais aussi les autres utilisateurs (différents du propriétaire et n’appartenant pas au groupe).
Seuls root et le propriétaire d’un fichier peuvent changer ses permissions d’accès.
(I) Info
L'utilisateur root outrepasse tous les droits. Il a accès à la lecture et la modification de tous les fichiers.
II. Lire ses droits
Les droits sont représentés par une suite de 9 caractères :
- Les trois premiers sont les permissions de l’utilisateur,
- Les trois suivants celles du groupe,
- Les trois dernières celles des autres utilisateurs.
rwxr-xr--
\ /\ /\ /
v v v
| | droits des autres utilisateurs (o)
| |
| droits des utilisateurs appartenant au groupe (g)
|
droits du propriétaire (u)
Ici, le propriétaire peut lire, écrire et exécuter le fichier, mais les utilisateurs du groupe attribué au fichier ne peuvent que le lire et l’exécuter, enfin, les autres utilisateurs ne peuvent que lire le fichier.
Une autre manière de représenter ces droits est sous forme binaire :
r = 4 si actif ou 0 si inactif
w = 2 si actif ou 0 si inactif
x = 1 si actif ou 0 si inactif
Ainsi, rwx vaut 7 (4+2+1), r-x vaut 5 (4+1) et r– vaut 4. Les droits complets (rwxr-xr–) sont donc équivalent à 754.
rwxr-xr--
Exemple :
On peut voir les droits attribués avec la commande ls -l:
-rw-rw-r-- 1 jeanmi jeanmi 0 févr. 18 23:02 bonjour
La sortie de la commande nous donne des informations sur le fichier bonjour. On y apprends que le fichier bonjour appartient à l’utilisateur jeanmi et que ses droits sont -rw-rw-r–
Il y à en fait 10 caractères sur la zone de droits, le premier concerne le type de fichier, par exemple :
- d : répertoire
- l : lien symbolique
- c : périphérique de type caractère
- b : périphérique de type bloc
- p : fifo
- s : socket
- – : fichier classique
III. Changer les droits
Seuls root et le propriétaire d’un fichier peuvent changer ses permissions d’accès. Pour cela, on peut utiliser la commande chmod.
Cette commande fonctionne de plusieurs façons :
Définir des droits :
Si on veut attribuer les droits rwx—— (Qui signifierait : seul l’utilisateur à tous les droits sur le fichier, et pas les autres) on peut utiliser la commande avec les valeurs octales :
chmod 700 bonjour
Ce qui donne comme résultat :
-rwx------ 1 jeanmi jeanmi 0 févr. 18 23:02 bonjour
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise-R:
chmod -R 700 dossier
Ce qui donne comme résultat :
drwx------ 2 jeanmi jeanmi 4096 févr. 18 23:16 dossier
Ajout ou ôter des droits :
La commande précédente oblige à attribuer tous les droits d’un coup. Mais il est possible de n’ajouter un droit que pour un type d’utilisateur spécifique.
(I) Info
Pour cela, on utilise toujours la commande chmod mais avec les attributs u g o a pour "qui" et r w x pour "quoi" et le symbole + ou - pour ajouter ou ôter des droits.
Pour ajouter le droit de lecture à tout le monde sur mon fichier :
chmod a+r bonjour
Pour ajouter le droit de modification au groupe :
chmod g+w bonjour
Pour retirer le droit de lecture aux autres :
chmod o-r fichier
(I) Info
On peut aussi combiner les opérations :
Ajouter le droit de lecture écriture au groupe et aux autres
chmod go+rw bonjour
Et pour finir, on peut combiner deux opérations différentes en séparant par une virgule, pour par exemple, ajouter le droitxau groupe et retirer le droit w aux autres :
chmod g+x,o-w bonjour
IV. Changer les utilisateurs et groupes sur les fichiers
Pour changer le possesseur du fichier, on utilise la commande chown :
chown fromage bonjour
Le fichier bonjour appartient maintenant à l’utilisateur fromage
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise-R:
chown -R fromage dossier
chown à la capacité de changer le possesseur (utilisateur) et le groupe :
chown fromage:users bonjour
Pour changer le groupe uniquement, c’est la commande chgrp :
chgrp users bonjour
Pour un dossier de manière récursive :
chgrp -R users dossier
V. Sauvegarder et restaurer les permissions
Il peut être utile de sauvegarder les permissions dans un contexte sensible, pour les restaurer en cas de fausse manipulation.
On utilisera le couple de commande setfacl et getfacl, qui serviront plus tard à gérer les ACL.
Pour lister de manière récursive les permissions d’un dossier :
getfacl -R dossier
La sortie ressemble à ceci :
# file: dossier
# owner: utilisateur
# group: users
user::rwx
group::r-x
other::r-x
# file: dossier/script.php
# owner: utilisateur
# group: users
user::rw-
group::r--
other::r--
# file: dossier/surveillance.jpg
# owner: utilisateurs
# group: users
user::rw-
group::r--
other::r--