[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