Bonjour à tous,

voici une petite martingale pour le jour où on cherche à remettre d’équerre les 
droits sur une arborescence de fichiers foutraque. Voici deux moyens de forcer 
chmod à n’appliquer les droits d’exécution qu’aux seuls dossiers (pour qu’ils 
soient traversant), et non aux fichiers (on ne veut pas tous les avoir 
exécutables).



sudo chmod -R ugo-x /repertoire_plein_de_sous-repertoires/

supprime le droit d’exécution sur la totalité des objets, indistinctement 
fichiers comme répertoires.


sudo chmod -R ugo+x /repertoire_plein_de_sous-repertoires/

évidemment, son contraire restaure le droit d’exécution sur la totalité des 
objets, c.a.d. les fichiers comme les répertoires. Ce qu’on ne cherche a priori 
jamais à faire.


sudo chmod -R ugo+X /repertoire_plein_de_sous-repertoires/

chmod restaure le droit d’execution sur les seuls répertoires, mais non sur les 
fichiers, si on utilise l’option -X avec une majuscule.


J’étais content d’avoir mis la main sur ce petit truc.




Pour appliquer de même aux seuls répertoires un attribut forçant l’identité 
(setuid) et l’appartenance à tel groupe (setgid) de tout élément nouvellement 
créé à l’intérieur de ces répertoires, la gymnastique est malheureusement un 
peu plus compliquée. 



sudo chmod -R ugo-s /repertoire_plein_de_sous-repertoires/


supprime le bit setuid sur la totalité des objets, indistinctement fichiers 
comme répertoires.


sudo chmod -R ug+s /repertoire_plein_de_sous-repertoires/

impose à tout fichier ou dossier nouvellement créé dans cette arborescence 
d’appartenir à l’utilisateur et au groupe du repertoire dans lequel il a été 
créé. C’est très pratique pour éviter la pagaille dans une arborescence 
partagée entre plusieurs utilisateurs : tout ce qu’ils y feront sera propriété 
commune au répertoire, et non leur propriété propre.


Malheureusement, l’option +s applique ce même attribut d’identité à tous les 
fichiers aussi, ce qu’on ne cherche là encore a priori que très rarement à 
faire. Car ça ouvrait alors le droit aux fichiers exécutables d’être lancés 
avec les droits de l’utilisateur qui les a créés ou du groupe auquel ils 
appartiennent, et non avec ceux de l’utilisateur qui cherche à les exécuter.


Or, chmod n’offre dans ce cas pas de variante +S à l’option +s, comme cela 
était possible avec les options +x/+X. C’est le cas au moins sur ma 
distribution. Pour parvenir à n’appliquer l’attribut d’identité Setuid qu’aux 
seuls dossiers, il faut alors combiner chmod avec find :


sudo find /repertoire_plein_de_sous-repertoires/ -type d -exec chmod ug+s {} \;


C’est l’option -type d de la commande find qui ne transmet à chmod que les 
seuls répertoires, et évite ainsi que l’option -s de chmod ne tague aussi les 
fichiers qu’ils contiennent.


Evidemment, je ne fais ici que recycler ce que j’ai trouvé sur la toile, pour 
répondre à mes propres besoins. Ce mail n’a pour but que de servir de 
pense-bête pour plus tard, à moi et à tous ceux qui se retrouvent parfois 
devant des arborescences où les droits sont retournés un jour à l’état sauvage.


Bye.
_______________________________________________
gull mailing list
[email protected]
http://forum.linux-gull.ch/mailman/listinfo/gull

Répondre à