[gull] [Solution] chmod +X et chmod +s

Frederic Dumas f.dumas at siteparc.fr
Wed Sep 12 17:23:06 CEST 2018


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.


More information about the gull mailing list