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)
- r : read (droit de lecture)
- w : write (droit d'écriture)
- x : execute (droit d'exécuter un fichier ou d'ouvrir un répertoire)
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--
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 :) ).
A bientôt