Dominique Meeùs
Dernière modification le   
retour à la table des matières — à l’index — à ma page de départ

Propriétaires et permissions de fichiers

On change de propriétaire par la commande chown. Exemple :

chown owner:group fichier
chown -R owner:group répertoire

(-R pour les sous-répertoires).

On attribue les permissions par la commande chmod.

Mon problème est que, dans diverses manipulations d’une installation à l’autre, d’une partition à l’autre et d’un propriétaire à l’autre (surtout en recopiant des fichiers d’une partition FAT, par exemple d’un stick USB), de nombreux documents ont reçu la permission d’exécution. (Si on double-clique un document soi-disant exécutable, on doit choisir si on veut le lancer ou l’afficher. C’est chiant.) Je veux retirer cette permission globalement. Example à ne pas suivre :

chmod -R u=rw,g=r,o= *

en effet, cette commande s’appplique aussi aux sous-répertoires et à leurs fichiers (-R). Elle leur donne uniquement (=) lire et écrire pour user, lire pour group et rien pour others. (Avec + on ajouterait des permissions aux permissions existantes, avec - on retirerait des permissions.) C’est mauvais parce que la permission x est retirée aux sous-répertoires qui en deviennent inaccessibles. (Du coup, les fichiers qu’ils contiennent ne sont même pas traités.) Mieux (attention, avec X majuscule) :

chmod -R u=rwX,g=rX,o= *

Cela répare les dégâts causés par la commande précédente : cela rétablit l’accès aux répertoires, mais rend aussi exécutables tous les fichiers qui l’étaient déjà pour qui que ce soit. Cette commande ne convient donc pas pour retirer la permission d’exécution aux documents. Pour assurer un traitement différent aux répertoires et aux fichiers, il semble que l’on doive passer par find en jouant sur le type d ou f. On doit écrire deux commandes séparées comme :

find /home/archives -type d -exec chmod u=rwx,g=rx,o= {} \;

pour les dossiers et

find /home/archives -type f -exec chmod u=rw,g=r,o= {} \;

pour les fichiers. (Attention, pas d’espaces derrière les virgules. Une expression telle que u=rwx,g=rx,o= doit être d’un seul tenant.)

Dans ces expressions, find cherche tous les répertoires (-type d) — respectivement les fichiers ordinaires (-type f) — et exécute (-exec) la suite de l’expression terminée par \;. Dans cette suite, chmod attribue les permissions (indiquées) à {} qui repésente le nom du fichier trouvé par find. Non seulement, c’est une jolie expression, mais ça marche et ça donne le résultat que je voulais.

Dominique Meeùs . Date: 2011… 2016