Wie berechnet sich umask unter Linux?

15

Ich weiß, dass ich umaskmit diesem Format privilegierte Benutzer einschränken kann umask ugo.

Ich verstehe, dass read = 4, write = 2 und exec = 1 ist. Wenn ich umaskjedoch tippe, werden 4 Ziffern zurückgegeben, was 0022oder ist 0073. Ich verstehe nicht, wie das jetzt funktioniert, weil es eine zusätzliche Ziffer gibt. Was ist diese zusätzliche Ziffer und was bedeutet 0022das?

Braiam
quelle

Antworten:

18

Nehmen Sie die Standardmaske 0666 an. umask0022 würde bedeuten , dass die neue Maske 0644 (0666-0022 = 0644) Leseberechtigungen für Gruppen und andere Benutzer (keine Schreib- oder Ausführungsberechtigungen) hat.

Die "zusätzliche" Ziffer (die erste Zahl = 0) gibt an, dass es keine speziellen Modi gibt.

Wenn der Modus mit einer Ziffer beginnt, wird er als Oktal interpretiert, andernfalls soll er symbolisch sein.

0 ist eine Ziffer, genau wie 1 (für das Sticky-Bit) oder 6 (für SGID). Ein Befehl wie chmodkann von anderen Methoden aufgerufen werden, z. B. chmod ug+rw mydirwo Sie die Lese- und Schreibberechtigungen für Benutzer und Gruppen hinzufügen würden. Beachten Sie, dass der Modus in diesem Fall (ug + rw) nicht mit einer Ziffer beginnt, sondern eher symbolisch interpretiert wird.

Unter en.wikipedia.org/wiki/Chmod#Symbolic_examples finden Sie Informationen zu Symbolen sowie unter www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ Informationen zu speziellen Modi.

Ich weiß nicht, dass Sie das erste bisschen mit dem entlarven würden umask, aber technisch könnten Sie. Es würde erklären, warum Sie es fast immer als eine Null sehen.

Gutschrift auf pinkfloydx33

Die erste Ziffer der Maske befasst sich mit speziellen Berechtigungen, die nicht ganz so sauber in den Besitzer / die Gruppe / das andere Modell passen. Wenn eine Dateiberechtigung aus vier Ziffern besteht, bezieht sich die erste auf diese speziellen Werte:

4000 = SUID
2000 = SGID
1000 = sticky bit

Das SUID-Bit, kurz für Set-User-ID, bewirkt, dass ein ausführbares Programm mit der effektiven Benutzer-ID (UID) des Eigentümers ausgeführt wird. Mit anderen Worten, unabhängig davon, wer es ausführt, wird das Programm mit den Rechten des Eigentümers ausgeführt. Dies ist häufig bei Programmen der Fall, die Root-Rechte benötigen, jedoch von normalen Benutzern ausgeführt werden sollen: Dies ist passwdein Beispiel dafür.

Das SGID-Bit, kurz für Set-Group-ID, ist sehr ähnlich, wird jedoch mit der effektiven Gruppen- ID (GID) des Besitzers ausgeführt.

Das Sticky-Bit ist etwas komplizierter. Wenn Sie weitere Informationen dazu wünschen, können Sie die Manpage lesen sticky.

Diese Bits können auch für Verzeichnisse verwendet werden, ihre Bedeutung ändert sich jedoch.

Ich glaube nicht, dass Sie das so einstellen können umask, dass Sie standardmäßig eines dieser zusätzlichen Bits aktivieren, aber Sie würden das wahrscheinlich sowieso nie wollen.

Gutschrift an user470379

Braiam
quelle
1
Tatsächlich können Sie keinen anderen Wert als den der letzten drei Ziffern als Null angeben. Laut Posix: "Die Interpretation von Moduswerten, die andere Dateimodusbits als die Dateiberechtigungsbits angeben, ist nicht spezifiziert." Laut man 2 umask(dem entsprechenden Systemaufruf) "werden nur die Dateiberechtigungsbits von mask" verwendet. In basherzeugt umask 1000 einen Fehler: "Oktalzahl außerhalb des Bereichs". Warum also die zusätzliche 0? Ich denke, es soll nur zeigen, dass die Zahl in Oktal ist.
rici
Dieser Pastebin hat keinerlei Bezug zu umask, daher verstehe ich nicht, wie wichtig er ist. Mit chmod können die ersten drei Bits gesetzt werden, mit umask können sie jedoch nicht maskiert werden. (Das heißt, Sie hätten schreiben können chmod 6777 dropbox. Und übrigens auch chmod ug+s.)
rici
Ja, du hast recht, ich weiß nicht, was ich gedacht habe.
Braiam
@Braiam: Deine Formel zur Berechnung der neuen Maske ist falsch, es ist nicht so 0666-0022, es ist so 0666 & ~0022.
Kuonglm
1
Ich denke, der Einwand ist nicht die Art und Weise, wie die Zahlen geschrieben werden, sondern die Verwendung des Subtraktionsoperators (-) anstelle von bitweise und (&).
BowlOfRed