Restaurer les droits des répertoires
| Fiche express | |
|---|---|
| Domaine | Permissions fichiers/répertoires |
| Commande | chmod, find, rpm --setugids/--setperms
|
| Contexte | Rattraper un chmod -R malencontreux sur un serveur
|
| Voir aussi | Chmod, ACL |
Il arrive, sur une exploitation, qu'une commande de type chmod -R 777 / soit lancée par erreur (mauvais répertoire, copier-coller malheureux, script mal testé). Il ne faut surtout pas exécuter volontairement une telle commande : appliquer 777 récursivement à la racine casse les permissions de tout le système et peut rendre la machine inutilisable (SSH, sudo, cron et de nombreux services refusent de fonctionner si leurs fichiers de configuration ou binaires ne sont plus protégés correctement). Cette page décrit comment restaurer des permissions correctes après un tel incident.
Restaurer via la base RPM
Sur un système basé RPM (RHEL/CentOS/Fedora), le gestionnaire de paquets connaît les permissions d'origine de chaque fichier installé et peut les réappliquer sans avoir à les redéfinir à la main :
for u in $(rpm -qa); do rpm --setugids "$u"; done # restaure propriétaire/groupe
for p in $(rpm -qa); do rpm --setperms "$p"; done # restaure les modes (droits)
Cette méthode ne couvre que les fichiers appartenant à un paquet RPM installé — les fichiers de configuration modifiés localement, les données applicatives et tout ce qui n'est pas géré par un paquet (répertoires utilisateurs, uploads, code déployé à la main) doivent être corrigés séparément.
Restaurer via find, en distinguant fichiers et répertoires
Sur les systèmes sans base RPM (Debian/Ubuntu) ou pour les arborescences hors gestion de paquets, on corrige les permissions à la main avec find, en traitant séparément les répertoires et les fichiers :
find /chemin/a/corriger -type d -exec chmod 755 {} \; # répertoires : rwxr-xr-x
find /chemin/a/corriger -type f -exec chmod 644 {} \; # fichiers : rw-r--r--
⚠️ Bien distinguer les droits fichiers et répertoires : un répertoire a besoin du bit d'exécution (x) pour pouvoir y entrer et lister ou ouvrir les fichiers qu'il contient, alors qu'un fichier ordinaire n'en a normalement pas besoin. Une commande find mal ciblée (par exemple -type f -exec chmod 755 appliqué sans distinction, ou un -type d oublié) peut aussi bien casser un exécutable ou un script légitime (en lui retirant le bit x) que rouvrir des droits en trop (un fichier sensible remis en 755 au lieu de 644, voire un chmod -R 777 qui rend tout accessible en écriture à tout le monde). Toujours vérifier les modes attendus (exécutables, clés privées, fichiers de configuration sensibles) avant de lancer une correction en masse, et préférer un test avec find ... -print (sans -exec) pour valider le périmètre ciblé avant d'appliquer le chmod.