Warum setzen “chmod 1777” und “chmod 3777” beide das Sticky-Bit?

15

Warum funktionieren die Befehle chmod 1777und chmod 3777beide, um das Sticky-Bit in einem Verzeichnis zu setzen ?

Liao Zhuodi
quelle
2
Sie schlagen eine potenziell riskante Operation vor. Die Kombination von Sticky-Bit- und RWX-Berechtigungen für alle ist eine schlechte Praxis. Jeder kann die Datei ändern und ausführen, und das S-Bit ermöglicht den Wechsel zum Root-Benutzer ohne Passwort.
jippie
1
Die Bits @jippie setuid und setgid verschwinden, wenn die Datei geändert wird, sodass Sie auf diese Weise keinen Root-Zugriff erhalten.
Kyle Jones
@ KyleJones, es ist immer noch gefährlich. Wenn die passwdBinärdatei von der Welt beschreibbar wäre, könnten Sie, wie Sie sagen, keinen Root-Zugriff erhalten, indem Sie sie ändern. Sie könnten sie jedoch durch eine andere Binärdatei ersetzen, die anschließend von allen ausgeführt wird passwd.
Wildcard
@Wildcard Einverstanden.
Kyle Jones

Antworten:

29

Jede Zahl (auch als Oktal bezeichnet, weil sie base8 ist) in dieser Gruppierung repräsentiert 3 Bits. Wenn Sie es in eine Binärdatei umwandeln, wird es viel einfacher.

1 = 0 0 1
3 = 0 1 1
5 = 1 0 1
7 = 1 1 1

Wenn Sie also 1777, 3777, 5777 oder 7777 hätten, würden Sie das Sticky - Bit setzen, da die dritte Spalte eine 1 wäre. Bei 3777, 5777 und 7777 setzen Sie jedoch zusätzlich andere Bits (SUID für die erste Spalte und SGID für die zweite Spalte).

Umgekehrt würde keine andere Zahl an dieser Stelle (bis zu maximal 7) das Sticky-Bit setzen, da die letzte Spalte nicht 1 oder "on" wäre.

2 = 0 1 0
4 = 1 0 0
6 = 1 1 0

JZeolla
quelle
3
+1 für eine schöne Beschreibung, wie Oktalzahlen funktionieren und wie sie auf die Dateiberechtigungsbits angewendet werden.
ein Lebenslauf vom
1
Es heißt "Bitmaske" und +1, um zu erklären / zu zeigen, wie es gesetzt werden kann, sowie cleardie Spalten "Eigentümergruppe" und "Andere".
Chris K
16

Die als Argument an chmod übergebenen Berechtigungen werden als Oktalwert angegeben. Jede Ziffer im Wert steht für drei Bits. Wenn drei Ziffern angegeben sind, legen Sie die Lese-, Schreib- und Ausführungsbits für den Eigentümer, die Gruppe und andere (alle anderen) der Datei fest. Wenn vier Ziffern angegeben werden, setzt die am weitesten links stehende Zahl die Bits setuid, setgid und sticky. Oktal 1 setzt das Sticky Bit. Oktal 2 setzt das Setgid-Bit. Oktal 2 + Oktal 1 ist Oktal 3, das sowohl das Setgid-Bit als auch das Sticky-Bit setzt.

Kyle Jones
quelle
1
Ist es nicht oktal 2 | Oktal 1 statt Oktal 2 + Oktal 1? Die Operationen haben in diesem Fall zufällig das gleiche Ergebnis, aber im Allgemeinen ist es bitweise oder wichtig, nicht wahr?
Gerrit
1
@gerrit Ja, im allgemeinen Fall sollten Sie sich an den binary orOperator wenden . Sie weisen jedoch darauf hin, dass dies in diesem Fall zum gleichen Ergebnis führt und dass viel mehr Menschen mit Addition vertraut sind.
ein Lebenslauf vom