Comprendre et modifier les droits fichiers
Sous Linux, chaque fichier appartient à un utilisateur et à un groupe, et trois niveaux de droits s'appliquent : le propriétaire, le groupe, et tous les autres. C'est le mécanisme fondamental de sécurité du système : comprendre les droits vous évitera des erreurs "Permission denied" et des failles de sécurité.
Lire les droits avec ls -l
ls -l /etc/passwd
# -rw-r--r-- 1 root root 1872 juin 15 09:00 /etc/passwd
Décomposons -rw-r--r-- :
- rw- r-- r--
│ │ │ └── Autres (others) : lecture seule
│ │ └────── Groupe (group) : lecture seule
│ └────────── Propriétaire : lecture + écriture
└──────────── Type : - fichier, d dossier, l lien
Les trois droits sont :
r(read) : lire le fichier / lister le dossierw(write) : modifier le fichier / créer des fichiers dans le dossierx(execute) : exécuter le fichier / traverser le dossier
chmod : modifier les droits
Notation symbolique (plus lisible)
chmod u+x script.sh # ajoute l'exécution au propriétaire (user)
chmod g-w config.conf # retire l'écriture au groupe
chmod o-r secret.key # retire la lecture aux autres
chmod a+r README.txt # tous (all) peuvent lire
Notation octale (plus rapide)
Chaque droit vaut un chiffre : r=4, w=2, x=1. On additionne par triplet.
| Octal | Binaire | Droits |
|---|---|---|
| 7 | 111 | rwx |
| 6 | 110 | rw- |
| 5 | 101 | r-x |
| 4 | 100 | r-- |
| 0 | 000 | --- |
chmod 644 fichier.conf # propriétaire rw-, groupe r--, autres r--
chmod 755 script.sh # propriétaire rwx, groupe r-x, autres r-x
chmod 600 private.key # propriétaire rw-, groupe ---, autres ---
Règle de sécurité : les clés SSH privées doivent être en
600: SSH refusera de les utiliser si elles sont lisibles par d'autres.
chown : changer propriétaire et groupe
chown alice fichier.txt # change le propriétaire
chown alice:webadmin fichier.txt # change propriétaire ET groupe
chown -R www-data:www-data /var/www/glpi/ # récursif sur tout un dossier
Cas concret
Après avoir déployé GLPI, Apache ne peut pas lire les fichiers du site :
ls -la /var/www/glpi/
# drwxr-x--- 5 technicien technicien 4096 juin 19 10:00 .
# Le problème : Apache tourne en tant que www-data, pas technicien
chown -R www-data:www-data /var/www/glpi/
chmod -R 755 /var/www/glpi/
chmod 640 /var/www/glpi/config/config_db.php # config DB en lecture seule pour www-data
graph LR FILE["fichier.conf<br/>-rw-r--r--"] --> U["Propriétaire (u)<br/>alice : rw-"] FILE --> G["Groupe (g)<br/>webadmin : r--"] FILE --> O["Autres (o)<br/>: r--"] U --> PERM["chmod 644<br/>chown alice:webadmin"]
Erreurs fréquentes
- Mettre
777(tout le monde peut tout faire) pour "régler" une erreur de permission : c'est une faille de sécurité majeure. - Oublier
-Ravecchownouchmodsur un dossier : les sous-dossiers gardent les anciens droits. - Confondre les droits sur un dossier : le droit
xsur un dossier permet d'y entrer (cd), pas d'exécuter des programmes.
À retenir
ls -l→ lire les droits : type + propriétaire(rwx) + groupe(rwx) + autres(rwx).chmod 755→ rwxr-xr-x (script exécutable public) ;chmod 600→ rw------- (fichier privé).chown -R www-data:www-data→ Apache peut lire le site web.
Mini-exercice
Créez un fichier test.sh dans /tmp/. Vérifiez ses droits avec ls -l. Rendez-le exécutable pour le propriétaire uniquement avec chmod u+x /tmp/test.sh. Vérifiez à nouveau avec ls -l et notez le changement.