Warum kann man Setuid/Setgid/Sticky-Bits nicht über die Oktalnotation mit chmod löschen?

Warum kann man Setuid/Setgid/Sticky-Bits nicht über die Oktalnotation mit chmod löschen?

Heute taucht also zufällig das Management bei der Arbeit auf und bittet mich, einer Gruppe von Ingenieuren einen Schnellkurs zur Verwendung von Linux zu geben. Anscheinend haben sie von meiner Ablehnung von Microsoft (aufgrund von Datenschutz- und Sicherheitsproblemen bei Win 10) Wind bekommen und jetzt bin ich der ansässige „Experte“ für alles, was *nix ist.

Nachdem ich der Gruppe die Schönheit der Einfachheit von Linux erklärt habe, gibt es Fragen zu Dateiberechtigungen. Ich erkläre chmoddie oktale Syntax für die Benutzergruppenwelt zum Zuweisen von Berechtigungen.

Dann weiter zum Setuid/Setgid/Sticky-Bit – ich demonstriere es anhand eines einfachen Beispiels wie chmod 2755 somefile.txtund weise darauf hin, dass das Setgid-Bit jetzt aktiviert ist. Um dieses Bit zu löschen, gebe ich ein chmod 0755, aber zu meinem Entsetzen bleibt das Setgid-Bit bestehen. Was?? Ich weiß, dass ich diese Syntax schon einmal verwendet habe, um Sticky-Bits zu löschen (wenn auch wahrscheinlich vor einem Jahrzehnt). Es war ziemlich peinlich, festzustellen, dass es nicht funktionierte, nachdem ich gerade davon geredet hatte, wie elegant das Design war.

Wie auch immer, ich habe ihnen auch die alternative Kurzschrift gezeigt g+sund g-sfestgestellt, dass sie g-sFUNKTIONIERT.

Nach der Präsentation dachte ich, ich hätte einen Fehler bei gefunden chmod, aber beim Durchsehen der manSeite stellte ich fest, dass das Verhalten „absichtlich“ war, da es einen expliziten Hinweis gibt, der besagt, dass chmoddie Sticky-Flags damit gesetzt, aber nicht gelöscht werden können.

WARUM wurde die Möglichkeit chmodentfernt, Sticky Bits mit der Oktalnotation zu löschen? Ich habe gegoogelt und einige Leute gefunden, die sagten, die führende Null sei „verwirrend“ und sollte weggelassen werden. Wirklich? Nach dieser Logik könnten wir genauso gut sagen, dass es für Bytes (z. B. ASCII-Code) unzulässig ist, führende „0“-Bits zu enthalten, weil dies „verwirrend“ ist. Die Leute, die die führende Null verwirrend finden, können die symbolische Notation verwenden. Die Leute, die die Oktalnotation verwenden möchten, sollten Oktal verwenden können.

Warum wurde chmoddie Oktalnotation zum Löschen der Sticky Bits so eingeschränkt, dass sie nicht unterstützt wird?

Antwort1

Das Problem ist, dass es vor der Einführung von Sticky Bits bereits viele Shell-Skripte usw. gab, die nur drei Oktalziffern (oder weniger) verwendeten. Außerdem ist die Konvention, dass jede Zahl mit führenden Nullen aufgefüllt werden kann, ziemlich tief verwurzelt.

Wenn man also die Oktalform mit einer führenden Null zum Zurücksetzen der Sticky Bits zugelassen hätte, hätten viele Skripte die Sticky Bits versehentlich zurückgesetzt. Das zu debuggen wäre ein Albtraum gewesen, also chmodendete man stattdessen mit der Einschränkung, dass man Sticky Bits in Oktalform nicht zurücksetzen kann. Wenn man sie wirklich zurücksetzen möchte (was selten vorkommt), kann man immer noch die alternative Form verwenden.

Wie bei vielen Formen überraschender Komplexität lautet die Antwort „Abwärtskompatibilität“.

verwandte Informationen