La gestion des droits sous Linux

La gestion des droits d’accès sous GNU/Linux, si elle peut sembler obscure au début, s’avère en fait très poussée et, une fois comprise, permet à l’utilisateur de gérer très finement les permissions accordées aux autres ainsi qu’à lui même.

 

A propos des utilisateurs et groupes

Comme sur tout mauvais bon système d’exploitation, sous Linux, il est possible de créer autant de comptes utilisateur qu’on le souhaite (en fait « seulement » 2³², soit un peu plus de 4 milliards, depuis le noyau 2.6).
De plus, il est possible de définir des groupes. On peut donc attribuer un utilisateur à tel ou tel groupe. Le ‘ou’ n’étant ici pas exclusif : un utilisateur peut appartenir à plusieurs groupes.

Visualisation des droits d’un fichier

Pour afficher le contenu d’un répertoire avec les droits associés au contenu :

ls -l

Si vous voulez n’afficher que les droits sur fichier :

ls -l fichier

La réponse se lit dans cet ordre :

  1. Le premier caractère : ‘d’, ‘l’, ou ‘-‘ pour directory, link ou fichier quelconque
  2. Les droits du propriétaire, dans cet ordre : ‘r’ (read/lecture) ‘w’ (write/écriture) ‘x’ (éxécution), ‘-‘ si le droit n’est pas activé
  3. Les droits du groupe (même syntaxe)
  4. Les droits des autres utilisateurs (idem)
  5. Nombre de lien(s) vers le fichier (en s’en fout ici)
  6. Nom du propriétaire
  7. Nom du groupe
  8. Taille du fichier
  9. Date de dernière modification

En guise d’exemple, si ls -l d’un fichier vous donne :

-rw-r--r-- 1 toto famille

Alors, Toto (membre du groupe ‘famille’) est propriétaire du fichier, il a les droits de lecture et d’écriture sur le fichier. Les autres membres de la famille ont les droits de lecture, tout comme les autres utilisateurs.

Changer le propriétaire d’un fichier

Ce changement se fait par la commande chown :

chown toto fichier

Maintenant, Toto est propriétaire de fichier.

Changer les permissions sur un fichier

Pour modifier les droits sur un fichier, c’est le fameux chmod. La syntaxe la plus simple à retenir utilise les arguments :

  • ‘u’, ‘g’, ‘o’ et ‘a’ respectivement pour user, group, others et all
  • ‘+’, ‘-‘ et ‘=’ pour l’ajout, la suppression ou l’exactitude des droits alloués.

Quelques exemples pour illustrer

Ajouter le droit d’exécution au propriétaire :

chmod u+x fichier

Enlever le droit d’écriture au groupe :

chmod g-w fichier

N’autoriser que la lecture aux autres utilisateurs :

chmod o=r fichier

Pour finir, une récursivité pour interdire aux autres utilisateurs tout accès à dossier, ainsi qu’à tous les sous-dossiers et fichiers inclus :

chmod -R o= dossier

Remarques

Si on ne spécifie pas le type d’utilisateur, c’est all qui est utilisé

chmod +x fichier

est donc équivalent à :

chmod a+x fichier

Il est possible de passer plusieurs arguments dans la même commande, séparés par des virgules :

chmod u+x,g-w,o= fichier

Valeur octale du chmod

Un nom bien barbare pour dire qu’on va écrire la valeur du chmod de façon décimale (3 droits, pour 3 types d’utilisateurs, donc 2³.2³.2³=512 valeurs possibles). La valeur numérique s’écrira sous forme de 3 chiffres consécutifs, chiffres compris entre 0 et 7.

Si vous êtes familier du code binaire, vous saisirez vite la logique : pour chaque type d’utilisateur, vous remplacez chaque permission par 1 si elle est accordée, 0 sinon. Il suffit alors d’écrire de façon décimale la valeur binaire obtenue. En faisant ça pour les trois types d’utilisateur, on trouve bien un nombre de la forme décrite ci-dessus.

Pour ceux qui ne savent pas faire la transformation binaire-décimale, c’est le moment d’apprendre ! Si ça vous pèse d’apprendre ça, voilà un récapitulatif :

  • aucun droit : 0 (—)
  • exécution seulement : 1 (–x)
  • écriture seulement : 2 (-w-)
  • écriture et exécution : 3 (-wx)
  • lecture seulement : 4 (r–)
  • lecture et exécution : 5 (r-x)
  • lecture et écriture : 6 (rw-)
  • tous les droits : 7 (rwx)

Exemples de chmod octal

Tous les droits au propriétaire, rien au autres :

chmod 700 fichier

Droits de lecture et écriture au propriétaire, lecture pour le groupe et rien pour les autres :

chmod 640

Droits par défaut lors de la création d’un fichier

Par défaut, c’est rw-r–r– avec pour propriétaire le créateur du fichier. On peut toutefois changer temporairement cette valeur en lançant :

umask x

Ainsi, durant toute votre session utilisateur, les fichiers que vous créerez auront x pour valeur chmod (valeur octale, voir § précédent). Si vous voulez que cette configuration soit permanente, il faut éditer le fichier .bash_profile.

Maintenant que vous connaissez tout des droits, vous pouvez partager les documents que vous souhaitez sans risque sur vos données sensibles.

Bonne exécution !