Cours Linux : Les permissions

Tout linuxien sait ce que sont les permissions dans un système Unix. En revanche, tous ne savent pas forcément comment modifier ces droits, et surtout, comment bien les modifier.

Dans ce cours, nous allons étudier les différents privilèges d'un système Unix, comment modifier les droits d'un fichier de manière optimale et les risques encourus en cas de mauvaise gestion de ces droits.

I. Présentation des différents droits Unix

La philosophie d'un système Unix est la suivante : tout est fichier. En effet, dans un système Unix, tout est caractérisé par un fichier, que ce soit un fichier texte, un répertoire ou les périphériques de la machine.
Il est donc primordial d'avoir connaissance et de maitriser les différents droits applicables à un fichier.

Pour voir les différents droit des fichiers, exécutons la commande ls -l dans un terminal :

-rw-r--r-- 1 benj benj 670567 2009-02-01 22:32 Freedom.tar.gz
drwxr-xr-x 5 benj benj   4096 2009-02-04 22:30 Roms
drwx------ 2 benj benj   4096 2009-02-05 18:40 ruby
lrwxrwxrwx 1 benj benj      9 2009-02-07 14:26 www -> /var/www/

Nous allons, pour le moment, nous intéresser aux lettres situées à gauche : (drwxr-xr-x)

La première lettre désigne le type de fichier :

  • - : fichier "classique"
  • d : répertoire (directory)
  • l : lien symbolique (link)
Passons ensuite aux droits des fichiers à proprement parlé :
  • r : read (droit de lecture)
  • w : write (droit d'écriture)
  • x : execute (droit d'exécuter un fichier ou d'ouvrir un répertoire)
Ces droits sont affichés de la sorte :
Les 3 premiers sont les droits du propriétaire du fichier, les trois suivants du groupe et les trois derniers des autres. Par exemple, pour cette ligne :
-rw-r--r-- 1 benj benj 670567 2009-02-01 22:32 Freedom.tar.gz

Ici, l'utilisateur (en général, celui qui a créé le fichier ou le dossier) est benj et le groupe est également benj (benj:benj : user:group)

Les droits sur ce fichier sont donc les suivants :
user (3 premiers caractères) : rw- (droits de lecture, écriture)
group (3 caractères suivants) : r-- (droit de lecture)
les autres : (3 derniers caractères) : r-- (droit de lecture)

Notez que pour qu'un dossier puisse être ouvert par un utilisateur, il doit avoir les droits d'exécution.

II. Comment modifier les droits d'un fichier

Il y a deux façons de modifier les droits d'un fichier : la manière "relative" qui consiste à modifier les droits existants et la manière "absolue"qui consiste à créer les droits à partir de rien.

La manière "relative"

Elle consiste, comme je l'ai dit, à modifier les droits existants. Par exemple, on souhaite simplement ajouter les droits d'exécution au groupe (en plus des droits existants). Cela ne modifie donc que le droit d'exécution, les autres droits sont conservés tels quels.
Rappel : Signification des lettres utilisés ci-dessous :

  • u : user (utilisateur)
  • g : group (groupe)
  • o : other (autres)
  • a: all (tout le monde)

Par exemple, nous souhaitons simplement ajouter les droits d'exécution au groupe. Nous devons donc exécuter cette commande :

chmod g+x nom_fichier

Un autre exemple, nous souhaitons ajouter les droits d'écriture au groupe et supprimer le droit de lecture aux autres (utilisateur non propriétaire du fichier et ne faisant pas partie du groupe du fichier) :

chmod g+w o-r mon_fichier

Enfin, nous souhaitons donner tous les droits à tout le monde (c'est une mauvaise idée, comme nous le verrons plus loin, mais c'est juste pour l'exemple) :

chmod a+rwx mon_fichier



Petite pause :)

La manière "absolue"

Cette méthode consiste à changer les droits en écrasant ceux existants.

Avant tout, un petit rappel : conversion des chiffres décimal / binaire

0 : 000
1 : 001
2 : 010
3 : 011
4 : 100
5 : 101
6 : 110
7 : 111

Remarquez qu'il y a autant de chiffres que de nombres de lettres nécessaires à la définition des droits.
Autrement dit, 5 correspond à 101 et donc à r-x, 4 à r-- et 7 à rwx. Simple non ?

Vous comprenez désormais le fameux 777 (chmod 777) correspond à rwxrwxrwx (soit tous les droits).

Vous souhaitez affecter ces droits à un fichier :

  • Tous les droits au propriétaire du fichier (user) : rwx
  • Les droits de lecture et d'écriture au groupe : rw-
  • Uniquement les droits de lecture aux autres : r--
Il faudra donc exécuter cette commande :

chmod 764 mon_fichier

La différence avec la méthode précédente est qu'avec cette méthode, il faut définir l'ensemble des droits à chaque fois (d'où le nom méthode "absolue")

Note : Je ne parlerais pas des droits "spéciaux" ici (sticky bit, set uid,...), ils feront l'objet d'un prochain article.

III. Les droits par défaut de vos fichiers

Seb me l'a très justement fait remarqué, j'ai oublié de parler des droits par défaut des fichiers. En effet, il est possible de définir les droits associés à vos fichiers lors de leur création. Je vais donc reprendre son commentaire car il est parfait :

On retrouve la valeur de son umask, simplement en tapant la commande umask dans un terminal. Pour la modifier, il suffit d'exécuter cette commande :
umask 002 (par exemple)

Avec cet exemple de mask positionné à 002, les fichiers créés auront par défaut les droits rw-rw-r--, cela s'explique (un peu d'algèbre booléen) :

Quand on crée un fichier, les droits de celui-ci sont 666 (soit rw-rw-rw) + NON masque
Si on note ça en bit, cela fait :

110 110 110   pour les rw-rw-rw-
000 000 010   pour le masque de 2
------------------
110 110 100   pour 666 et Non masque
rw- rw- r--

Quand on crée un répertoire c'est le même principe mais les droits de celui-ci sont de 777 + NON masque

Ainsi, dans certains cas, il est plus intéressant de changer la valeur de umask que de faire des chmod à répétition ensuite.


IV. Les dangers d'une mauvaise gestion des droits

Comme je l'ai évoqué dans l'article "les 10 erreurs les plus fréquentes sous Linux", une mauvaise gestion des droit sous Linux peut s'avérer très dangereux !

Un exemple simple, vous montez un site web (avec un serveur LAMP) et vous rencontrez une erreur : "You don't have permission to access /www/dossier/ on this server".
Vous n'avez donc pas les droits, la solution de facilité serait de faire un chmod -R 777 (tous les droits à tout le monde sur tous les fichiers).

Cette opération est risquée car elle autorise l'exécution de tous les fichiers. Une personne avec des mauvaises intentions pourrait donc y insérer du code malveillant et l'exécuter sur votre machine.

Il faut donc faire très attention aux droits que vous accordez à vos fichiers (maintenant vous savez comment faire :) ).



Ainsi ce termine ce petit cours, j'espère qu'il vous a été utile :)
A bientôt
Vus : 385
Publié par Génération Linux : 126