Droits sous Linux : Utilisateurs, Groupes, Permissions
Table des matières
Les permissions constituent un système simple de définition des droits d'accès aux fichiers. Elles restent le moyen le plus utilisé pour définir les droits des utilisateurs.
Cet article présente simplement leur lecture, et leur attribution.
Avant tout, quelques termes qui seront rencontrés dans la suite de la lecture :
Les différents droits disponibles sont les suivants :
Ces droits ont deux sens différents s'ils sont appliqués à des fichiers ou des dossiers :
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.
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.
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,
et enfin que les autres utilisateurs ne peuvent que lire le fichier.
Une autre manière de représenter ces droits est sous forme binaire, où
Et ce pour u, g et o.
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.
On peut voir les droits attribués avec la commande ls -l :
Ici, on a donc plus d'informations.
La sortie signifie que le fichier fichier (de taille 8) appartient à adriencl, qu'on lui a attribué le groupe users, et que les droits sont rw-r--r--.
On remarque qu'il y a en fait 10 caractères sur la zone de droits. Le premier - n'est pas un droit, c'est un caractère réservé pour indiquer le type de fichier. Il peut prendre les valeurs suivantes :
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.
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 :
Voici ce que cela donne :
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise -R :
La commande suivante 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.
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 :
Pour ajouter le droit de modification au groupe :
Pour retirer le droit de lecture aux autres :
On peut aussi combiner les opérations :
Ajouter le droit de lecture écriture au groupe et aux autres
Et pour finir, on peut combiner deux opérations différentes en séparant par une virgule, pour par exemple, ajouter le droit x au groupe et retirer le droit w aux autres :
Pour changer le possesseur du fichier, on utilise la commande chown :
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise -R :
chown a la capacité de changer le possesseur (utilisateur) et le groupe :
Pour changer le groupe uniquement, c'est la commande chgrp :
Pour un dossier de manière récursive :
Pour ajouter un utilisateur, on utilise la commande useradd :
Pour supprimer un utilisateur :
Ici, le -r permet de supprimer en plus son dossier personnel et le spool du courrier.
Pour modifier un utilisateur existant c'est la commande usermod .
Pour voir les différents usages (changement d'UID, ajout de groupes, ...) se référer au manuel court :
Quelques exemples :
Ajouter adrien dans le groupe wheel sans supprimer ses autres groupes :
Changer l'identifiant et le /home de l'utilisateur adriencl en adrien2 :
Pour ajouter un utilisateur à un groupe, avec gpasswd :
Et pour supprimer l'utilisateur du groupe :
Pour créer un groupe :
Et pour le supprimer :
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 :
La sortie ressemble à ceci :
Pour sauvegarder cela, on redirige la sortie dans un fichier :
Après une modification, non désirée par faute d'un administrateur, script, problème applicatif, on pourra restaurer les permissions avec :
Introduction
Les permissions constituent un système simple de définition des droits d'accès aux fichiers. Elles restent le moyen le plus utilisé pour définir les droits des utilisateurs.
Cet article présente simplement leur lecture, et leur attribution.
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.
Fonctionnement des permissions
Quels sont les droits
Les différents droits disponibles sont les suivants :
- Lecture (noté r comme read).
- Écriture (noté w comme write).
- Exécution (noté x comme eXecution).
Ces droits ont deux sens différents s'ils sont appliqués à des fichiers ou des dossiers :
Pour les 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).
Pour les 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.
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.
Code :
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,
et enfin que les autres utilisateurs ne peuvent que lire le fichier.
Une autre manière de représenter ces droits est sous forme binaire, où
r = 4 si actif ou 0 si inactif
w = 2 si actif ou 0 si inactif
x = 1 si actif ou 0 si inactif
w = 2 si actif ou 0 si inactif
x = 1 si actif ou 0 si inactif
Et ce pour u, g et o.
Code BASH :
rwxr-xr--
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.
Exemple
On peut voir les droits attribués avec la commande ls -l :
Code BASH :
ls -l
Code :
-rw-r--r-- 1 adriencl users 8 1 janv. 12:56 fichier
Ici, on a donc plus d'informations.
La sortie signifie que le fichier fichier (de taille 8) appartient à adriencl, qu'on lui a attribué le groupe users, et que les droits sont rw-r--r--.
On remarque qu'il y a en fait 10 caractères sur la zone de droits. Le premier - n'est pas un droit, c'est un caractère réservé pour indiquer le type de fichier. Il peut prendre les valeurs suivantes :
- 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
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 :
Code BASH :
chmod 700 fichier
Voici ce que cela donne :
Code BASH :
ls -l fichier
Code :
-rw-r--r-- 1 adriencl users 8 1 janv. 12:56 fichier
Code BASH :
chmod 700 fichier ls -l fichier
Code :
-rwx------ 1 adriencl users 8 1 janv. 12:56 fichier
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise -R :
Code BASH :
chmod -R 700 dossier
Ajouter ou ôter des droits
La commande suivante 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.
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 :
Code BASH :
chmod a+r fichier
Pour ajouter le droit de modification au groupe :
Code BASH :
chmod g+w fichier
Pour retirer le droit de lecture aux autres :
Code BASH :
chmod o-r fichier
On peut aussi combiner les opérations :
Ajouter le droit de lecture écriture au groupe et aux autres
Code BASH :
chmod go+rw fichier
Et pour finir, on peut combiner deux opérations différentes en séparant par une virgule, pour par exemple, ajouter le droit x au groupe et retirer le droit w aux autres :
Code BASH :
chmod g+x,o-w fichier
Changer les utilisateurs et groupes sur les fichiers
Pour changer le possesseur du fichier, on utilise la commande chown :
Code BASH :
chown adrien monfichier
Si on veut le faire de manière récursive (sur un dossier par exemple) , on utilise -R :
Code BASH :
chown -R adrien mondossier
chown a la capacité de changer le possesseur (utilisateur) et le groupe :
Code BASH :
chown adrien:users monfichier
Pour changer le groupe uniquement, c'est la commande chgrp :
Code BASH :
chgrp users monfichier
Pour un dossier de manière récursive :
Code BASH :
chgrp -R users mondossier
Gérer les utilisateurs et groupes
Gérer les utilisateurs
Pour ajouter un utilisateur, on utilise la commande useradd :
Code BASH :
useradd -m -G lp,wheel,audio,cdrom,video,cdrw,usb,users,cron,crontab -s /bin/bash adriencl
-m permet de créer le dossier personnel (par défaut /home/nomdelutilisateur)
-G permet d'ajouter des groupes au nouvel utilisateur,
-s pour définir le shell de connexion.
-G permet d'ajouter des groupes au nouvel utilisateur,
-s pour définir le shell de connexion.
Pour supprimer un utilisateur :
Code BASH :
userdel -r adriencl
Ici, le -r permet de supprimer en plus son dossier personnel et le spool du courrier.
Pour modifier un utilisateur existant c'est la commande usermod .
Pour voir les différents usages (changement d'UID, ajout de groupes, ...) se référer au manuel court :
Code BASH :
usermod --help
Quelques exemples :
Ajouter adrien dans le groupe wheel sans supprimer ses autres groupes :
Code BASH :
usermod -G wheel -a adrien
Changer l'identifiant et le /home de l'utilisateur adriencl en adrien2 :
Code BASH :
usermod -m -d /home/adrien2 -l adrien2 adriencl
Pour ajouter un utilisateur à un groupe, avec gpasswd :
Code BASH :
gpasswd -a utilisateur groupe
Et pour supprimer l'utilisateur du groupe :
Code BASH :
gpasswd -d utilisateur groupe
Gérer les groupes
Pour créer un groupe :
Code BASH :
groupadd legroupe
Et pour le supprimer :
Code BASH :
groupdel legroupe
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 :
Code BASH :
getfacl -R dossier
La sortie ressemble à ceci :
Code :
# file: dossier
# owner: adrien
# group: nous
user::rwx
group::r-x
other::r-x
# file: dossier/script.php
# owner: adrien
# group: nous
user::rw-
group::r--
other::r--
# file: dossier/surveillance.jpg
# owner: adrien
# group: nous
user::rw-
group::r--
other::r--
Pour sauvegarder cela, on redirige la sortie dans un fichier :
Code BASH :
getfacl -R dossier > sauvegarde_permissions_dossier
Après une modification, non désirée par faute d'un administrateur, script, problème applicatif, on pourra restaurer les permissions avec :
Code BASH :
setfacl --restore=sauvegarde_permissions_dossier