Table des matières

chmod / chown

Vérifier les droits

Pour voir les droits sur les fichiers et répertoires courants :

ls -l *

Résultat :

drwxr-xr-x    4 root   root    4096 jun 23 15:24 home

Décomposition du résultat :

typedroits utilisateurdroits du groupedroits des autres utilisateur propriogroupe propriotailledate de modifnom du repertoire ou fichier
drwxr-xr-x4rootroot4096jun 23 15:24home

Modification des propriétaires d'un fichier

Pour que l'utilisateur benoit et le groupe admin soient propriétaires du fichier file.txt

chown benoit:admin file.txt

Pour que l'utilisateur benoit et le groupe admin soient propriétaires du répertoire directory ainsi que tous les sous-fichiers et sous-dossiers :

chown -R benoit:admin directory

Pour changer le propriétaire en montrant les modifications effectuées :

chown -c benoit file*.txt

Modification des droits sur un fichier

Règles d'application des droits

Pour modifier des droits sur un fichier il faut comprendre le tableau suivant :

typeUserGroupeOthers
identification-ugo
affichage système-rwxrwxrwx
valeur numérique-421421421

Pour chaque user, group et others il est possible d'appliquer les droits suivants :

Changement de droit avec les lettres

Avec cette méthode l'ajout de droit s'effectue par le signe + et la suppression par le signe -

Pour ajouter les droits de lecture pour le group :

chmod g+r file.txt

Pour ajouter les droits de lecture et ecriture pour le group :

chmod g+rw file.txt

Pour ajouter les droits d'exécution à l'utilisateur (propriétaire):

chmod u+x file.txt

Pour retirer les droits d'écriture au autres :

chmod o-w file.txt

Changement de droit avec les valeurs numériques

Avec cette méthode le changement de droit s'effectue par l'addition des valeurs numériques :

4+2+1 = 7 = rwx
4+2+0 = 6 = rw-
4+0+1 = 5 = r-x
0+0+0 = 0 = ---

Il faut faire cette opération pour l'utilisateur, le groupe et les autres en fonction des droits que l'on veut donner pour obtenir 3 chiffre que l'on appliquera dans notre commande. Donc pour donner les droit rwx pour l'utilisateur, r– pour le groupe et rien pour les autres :

chmod 740 file.txt

Droits spéciaux: setuid, setgid, sticky bit

Quand un fichier est exécutable par son propriétaire, il peut de plus être setuid. Cela signifie que lorsqu'il est exécuté, il l'est avec les droits de son propriétaire, et non avec ceux de l'utilisateur qui le lance. Par exemple, le programme passwd, qui permet à un utilisateur de modifier son mot de passe, est setuid root (c'est à dire qu'il est setuid et qu'il appartient à l'utilisateur root): il doit pouvoir écrire dans le fichier /etc/passwd (ou /etc/shadow), dans lequel seul root peut écrire.

De la même façon, un exécutable peut être setgid, et s'exécuter avec les droits du groupe auquel il appartient.

chmod u+s myscript.sh

Restaurer les droits et propriétaires sur tout un système

Il peut arriver que des droits récursif aient été défini par erreur et rende le système “non redémarrable”. Exemple de commande fatal pour un serveur Linux.

chmod 777 /*

Des droits trop permissifs mettent le bon fonctionnement du serveur en péril. Si c'est le cas, il est déconseiller de redémarrer le serveur avant de restaurer les droits.

L'astuce ci-dessous permet de restaurer les droits d'un linux

Sur un serveur Linux sain, lancer les commandes suivantes :

find / -printf 'chmod %m "%h/%f"\n' > restore-chmod.sh
find / -printf 'chown %u:%g "%h/%f"\n' > restore-chown.sh

Transférer les deux scripts générés sur le serveur cassé et lancer les scripts :

bash restore-chmod.sh
bash restore-chown.sh

A noter qu'il peut y avoir des erreurs (notamment sur des fichiers absents).