Credit : Illustration backtotheweb.fr
Les permissions Linux expliquees : chmod, chown, ACL
Les bases : utilisateur, groupe, autres
Petit guide rapide parce que la doc officielle est... disons perfectible.
Chaque fichier Linux a trois niveaux de permission :
- u (user) : le proprietaire du fichier
- g (group) : le groupe associe
- o (others) : tous les autres utilisateurs
Et trois types de droits :
| Droit | Lettre | Octal | Fichier | Repertoire |
|---|---|---|---|---|
| Lecture | r | 4 | Lire le contenu | Lister les fichiers |
| Ecriture | w | 2 | Modifier le contenu | Creer/supprimer des fichiers |
| Execution | x | 1 | Executer le fichier | Traverser le repertoire |
Affichons les permissions :
ls -la /var/www/
# drwxr-xr-x 3 www-data www-data 4096 mars 22 10:00 html
# -rw-r--r-- 1 www-data www-data 612 mars 22 10:00 index.html
Le premier caractere indique le type (d = repertoire, - = fichier, l = lien).
chmod : modifier les permissions
Notation octale
Chaque groupe de trois droits se traduit en un chiffre de 0 a 7 :
# rwxr-xr-x = 755
chmod 755 /var/www/html
# rw-r--r-- = 644
chmod 644 /var/www/html/index.html
# rwx------ = 700
chmod 700 ~/.ssh
# rw------- = 600
chmod 600 ~/.ssh/id_rsa
Notation symbolique
# Ajouter l'execution au proprietaire
chmod u+x script.sh
# Retirer l'ecriture au groupe et aux autres
chmod go-w fichier.txt
# Donner lecture a tous
chmod a+r document.pdf
# Appliquer recursivement
chmod -R 755 /var/www/html/
chown : changer le proprietaire
# Changer le proprietaire
sudo chown www-data fichier.html
# Changer proprietaire et groupe
sudo chown www-data:www-data fichier.html
# Recursivement sur un repertoire
sudo chown -R www-data:www-data /var/www/html/
# Changer seulement le groupe
sudo chgrp developers /opt/projet/
Les bits speciaux
Setuid (4xxx)
Un fichier avec setuid s'execute avec les droits de son proprietaire :
chmod u+s /usr/local/bin/programme
chmod 4755 /usr/local/bin/programme
# -rwsr-xr-x
Exemple concret : /usr/bin/passwd a le setuid pour modifier /etc/shadow en tant que root.
Setgid (2xxx)
Sur un repertoire, les nouveaux fichiers heritent du groupe du repertoire :
sudo mkdir /opt/projet-equipe
sudo chgrp developers /opt/projet-equipe
sudo chmod 2775 /opt/projet-equipe
# drwxrwsr-x
Tous les fichiers crees dans ce repertoire appartiendront au groupe developers.
Sticky bit (1xxx)
Sur un repertoire, seul le proprietaire d'un fichier peut le supprimer :
sudo chmod 1777 /tmp
# drwxrwxrwt
C'est pourquoi /tmp a le sticky bit : tout le monde peut y ecrire, mais personne ne peut supprimer les fichiers des autres.
ACL : permissions avancees
Les permissions standard ne permettent qu'un proprietaire et un groupe. Les ACL (Access Control Lists) offrent plus de flexibilite :
# Installer les outils ACL
sudo apt install acl
# Donner acces en lecture a un utilisateur specifique
setfacl -m u:jean:rx /opt/projet/
# Donner acces en ecriture a un groupe
setfacl -m g:designers:rw /opt/projet/assets/
# Definir des permissions par defaut pour les nouveaux fichiers
setfacl -d -m g:developers:rwx /opt/projet/
# Afficher les ACL
getfacl /opt/projet/
Resultat de getfacl :
# file: opt/projet/
# owner: root
# group: developers
user::rwx
user:jean:r-x
group::rwx
group:designers:rw-
mask::rwx
other::r-x
default:group:developers:rwx
Pour un serveur web IONOS typique, les permissions recommandees sont :
# Fichiers : 644, Repertoires : 755, Proprietaire : www-data
find /var/www/html -type f -exec chmod 644 {} \;
find /var/www/html -type d -exec chmod 755 {} \;
sudo chown -R www-data:www-data /var/www/html
Des permissions bien configurees sont la premiere barriere de securite de votre serveur.