Les droits sur les fichiers et répertoires sur GNU/Linux

UN des grands intérêts d'Unix est d'avoir été conçu dès le départ avec la notion de droits : les personnes utilisant le même poste de travail peuvent très bien (et c'est recommandé) avoir leurs espaces séparés pour ne pas risquer d'abîmer le travail des autres. Par ailleurs, l'installateur du système, le super-utilisateur, dispose de droits plus étendus, empêchant les simples utilisateurs de rendre le système inutilisable.

Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers…)

1. Root : le superutilisateur

2. Les droits sur un fichier

3. Modifier les droits d'un fichier

4. Changer de propriétaire

1. Root : le superutilisateur

La personne qui installe le système détient les droits de super-utilisateur, qui lui permettent d'administrer le système, c'est-à-dire installer ou désinstaller des logiciels, des périphériques, d'interdire ou de permettre de nouveaux utilisateurs… le mot de passe root est donc une question de survie pour un système Unix. Par ailleurs, l'administrateur ne devrait jamais utiliser les droits de superutilisateur pour son travail personnel, au risque d'abîmer le système ou les fichiers des autres utilisateurs. En utilisant des droits plus limités, on fait moins de bêtises…

À l'allumage du PC, si le système graphique n'est pas lancé (mode récupération rescue), on rentre en mode super-utilisateur avec root [Enter] plus le mot de passe super-utilisateur. On quitte ce mode avec [Ctrl-d].

En console, on utilise la commande su [Enter] puis on saisit le mot de passe super-utilisateur. De $ (par défaut), l'invite devient #, qui est la signature d'une console disposant des droits de superutilisateur. On peut alors utiliser les éditeurs vim (obsolète), emacs (compliqué) ou nano (intermédiaire) pour éditer les fichiers sensibles, et certaines commandes qui requièrent les droits les plus élevés. mc permet la navigation et l'édition intuitive des fichiers de configuration, mais il faut l'installer au préalable.

Attention! Pour disposer des commandes du système (situées dans les répertoires /sbin, /usr/local/sbin, /usr/sbin), à partir de Debian 10 Buster, il faut ajouter un tiret à la commande : su -

On quitte le mode super-utilisateur d'une console en saisissant exit (attention : su toto revient à l'utilisateur toto, mais un exit à ce stade revient au mode superutilisateur).

Mode graphique en super-utilisateur

Les distributions sérieuses actuelles ne permettent pas de lancer une application graphique à partir d'une console "super-utilisateur". On contourne cette interdiction avec les commandes :

simple utilisateur$ xhost si:localuser:root
simple utilisateur$ su -

Une erreur est possible en ce mode :

no display name and no $DISPLAY environment variable

Une façon de la contourner est (risqué?) :

#En mode super-utilisateur: su - [Enter] export DISPLAY=:0; xhost +

…le lancement à partir de la console d'une application en mode graphique. Le mode xhost reste valide durant la session. Pour le quitter avant terme (noter le tiret avant si) :

#En mode super-utilisateur: su - [Enter] exit
simple utilisateur$ xhost -si:localuser:root

Il vaut mieux ne pas abuser de ce passe-droit. Pour éditer des fichiers en mode super-utilisateur, il est possible de lancer nano, mc ou vim dans une console en mode super-utilisateur

2. Les droits sur un fichier

En Unix, il est possible de décider qui peut lire ou modifier/effacer les fichiers, ou encore lancer les scripts.

La commande ls -l dans n'importe quel répertoire non vide retourne des informations de ce genre :

-rwxr-----  1 toto toto   46284 2011-07-03 19:54 LTR.py
drwxr-x--- 12 toto lou     4096 2013-07-04 15:00 musique
-rw-r--r--  1 toto toto   46284 2014-07-03 19:54 nature.txt

La première colonne a une largeur de 10 caractères. Le premier donne la nature du fichier : d pour directory (répertoire), un trait pour un fichier simple, l pour un lien…

Les trois caractères suivants concernent le propriétaire du fichier (le premier nom qui suit, toto en l'occurrence). Le r (read) signifie que toto a le droit de lire le fichier; le w (write) que toto a le droit d'écrire (modifier ou effacer) et x (exécuter un script ou une application ou accéder à un répertoire). Viennent ensuite trois caractères concernant les permissions octroyées aux personnes inscrites à un groupe (dont le nom est désigné dans la deuxième colonne de noms). Les trois derniers caractères concernent les permissions conférées à tout le monde.

-rwxr-----  1 toto toto   46284 2011-07-03 19:54 LTR.py

…signifie que le fichier LTR.py (script python) peut être lu, modifié et exécuté (lancé) par l'utilisateur toto, mais seulement lu par les utilisateurs affiliés au groupe toto.

Pour affilier l'utilisatrice fifi au groupe toto, le super-utilisateur doit l'y inscrire :

#En mode super-utilisateur: su - [Enter] addgroup fifi toto

ou l'ajouter (également en mode superutilisateur) dans le fichier /etc/group en regard de toto :

lp:x:7:peps,fifi,toto
audio:x:29:peps,fifi,toto
video:x:44:peps,fifi,toto
games:x:60:
toto:x:1000:fifi
fifi:x:1001:
peps:x:1002:
 etc.

On voit dans ce fichier que toto, peps et fifi ont accès à l'imprimante (lp), au son (audio) et à la vidéo, et que fifi est affiliée au groupe toto.

drwxr-x--- 12 toto lou     4096 2013-07-04 15:00 musique

…indique que le répertoire (d) musique est librement accessible (x) à l'utilisateur toto et aux éventuels affiliés à l'utilisatrice lou ; par contre, les affiliés au groupe lou n'ont pas le moyen de modifier le répertoire, et donc ne peuvent y ajouter ni en effacer de fichier.

Les trois derniers caractères concernent tous les utilisateurs, qui ne peuvent ici rien faire dans ce répertoire.

3. Modifier les droits d'un fichier

Seuls le super-utilisateur et le propriétaire d'un fichier ou d'un répertoire peuvent en modifier les droits. toto peut changer les droits du fichier nature.txt, puisqu'il lui appartient :

drwxr-x--- 12 toto nini    4096 2013-07-04 15:00 musique

…avec chmod :

toto@villon:~$ chmod 754 nature.txt

Les chiffres représentent respectivement les droits du propriétaire (user), du groupe (group) et de tout le monde (other). Chaque chiffre se décompose ensuite :

7 = 4 (r) + 2 (w) + 1 (x)  = rwx (tous les droits)
6 = 4 (r) + 2 (w)          = rw- (droits de lecture et d'écriture)
5 = 4 (r)         + 1 (x)  = r-x (droits de lecture et d'exécution)
4 = 4 (r)                  = r-- (droits de lecture seule; s'utilise surtout pour le groupe et pour "tout le monde")
3 =         2 (w) + 1 (x)  = -wx (écriture et exécution : très rare)
2 =         2 (w)          = -w- (écriture seule : très rare)
1 =               + 1 (x)  = --x (exécution seule : très rare)
0 =                        = --- (aucun droit; s'utilise surtout pour "tout le monde")

Il existe une autre manière de changer les droits, utilisant les lettres u (utilisateur propriétaire), g (group), o (other), a (all : propriétaire, groupe et autres utilisateurs), en plus des r, w et x :

chmod g=rwx accorde tous les droits au groupe
chmod o= retire tous les droits aux autres (ni propriéaire ni groupe)
chmod g+rx ajoute les droits de lecture et d'exécution au groupe
chmod a-x retire le droit d'exécution à tout le monde (y compris au propriétaire)
chmod a=r,u=wx (pas d'espace après la virgule) accorde le droit de lecture à tout le monde, celui d'édition et d'exécution au propriétaire seulement

Notes

4. Changer de propriétaire et de groupe

Pour modifier la propriété d'un fichier ou d'un répertoire, on utilise chown, qui permet de fixer le propriétaire et le groupea :

chown toto:fifi LTR.py

Notes :