Pourquoi ne peut-on pas effacer les bits setuid / setgid / sticky via la notation octale avec chmod?

3

Alors aujourd'hui, au travail, la direction se présente au hasard et me demande de donner un cours intensif sur l'utilisation de Linux à un groupe d'ingénieurs. Apparemment, ils ont eu vent de ma dissension de Microsoft (en raison de problèmes de confidentialité et de sécurité liés à Win 10) et maintenant je suis le "spécialiste" résident pour tout ce qui concerne * nix.

Après avoir expliqué au groupe la beauté de la simplicité de Linux, des questions se posent sur les autorisations de fichiers. J'explique chmodet la syntaxe octale utilisateur-groupe-monde pour l'attribution d'autorisations.

Ensuite, passons au bit setuid / setgid / sticky - je démontre avec un exemple simple tel que chmod 2755 somefile.txtet souligne que le bit setgid est maintenant activé. Pour effacer ce bit, je publie chmod 0755, mais à mon grand désarroi, le bit setgid persiste. Quoi?? Je sais que j'ai déjà utilisé cette syntaxe pour effacer les bits persistants (mais probablement il y a une décennie). C'était assez embarrassant de constater que cela ne fonctionnait pas juste après que j'ai expliqué à quel point le design était élégant.

Quoi qu'il en soit, je leur ai aussi montré la g+set g-ssténographie alternatif et découvert que g-sSAVIEZ travail.

Après la présentation, je pensais avoir trouvé un bogue avec chmod, mais après avoir examiné la manpage, j'ai constaté que le problème était "inhérent au projet", car une note explicite chmodpeut être utilisée pour définir les drapeaux collants, mais pas pour les effacer. .

POURQUOI la possibilité chmodd'effacer les bits collants à l'aide de la notation octale a-t-elle été supprimée? J'ai cherché sur Google et j'ai trouvé des gens qui disaient que le zéro au début était "déroutant" et devrait être omis. Vraiment? Par cette logique, on pourrait aussi bien dire qu'il est illégal pour des octets (par exemple, du code ASCII) de contenir des bits "0" en tête, car ils sont "déroutants". Les personnes qui trouvent le zéro non significatif déroutant peuvent utiliser la notation symbolique. Les personnes souhaitant utiliser la notation octale devraient pouvoir utiliser octal.

Pourquoi a-t-on été chmodparalysé pour ne pas supporter la notation octale pour effacer les bits collants?

digitale
la source
quelle coquille utilisez-vous? Je ne peux pas reproduire vos conclusions avec BASH. Quelle que soit la réponse apportée, cela est probablement le résultat de compromis de compatibilité existants. Malheureusement, il n’ya presque jamais de réponse canonique aux questions "pourquoi" concernant les choix de conception. Je suppose que c'est pour se protéger contre les obus qui envoient implicitement le zéro non significatif, même si cela peut être indésirable.
Frank Thomas

Réponses:

2

Le problème est qu'avant l'introduction des sticky bits, il y avait déjà beaucoup de scripts shell, etc., qui utilisaient seulement trois chiffres octaux (ou moins). En outre, la convention selon laquelle n'importe quel nombre peut être complété par des zéros non significatifs est assez profondément enracinée.

Donc, si on avait autorisé la forme octale avec un zéro non significatif de réinitialiser les bits collants, de nombreux scripts auraient réinitialisé accidentellement les bits collants. Le débogage qui aurait été un cauchemar, chmods'est donc retrouvé avec la restriction qu'il est impossible de réinitialiser les sticky bits en octal. Après tout, si vous voulez vraiment les réinitialiser (ce qui arrive rarement), vous pouvez toujours utiliser le formulaire alternatif.

Donc, comme beaucoup de formes d'une complexité surprenante, la réponse est "compatibilité ascendante".

dirkt
la source