Wie funktioniert das Klebebit?

148

SUID

Das Sticky-Bit, das auf ausführbare Programme angewendet wird, die das System markieren, um ein Abbild des Programms im Speicher zu behalten, nachdem das Programm beendet wurde.

Aber ich weiß nicht, was es in Erinnerung hat. Und wie kann ich sie in diesem Fall sehen?

Zufall
quelle
Hier ist ein gutes Tutorial mit Beispielen und Erklärungen. Der Schlüssel zum Verständnis ist das Oktalsystem. Linux Sticky Bits Tutorial mit Beispielen .
CMP

Antworten:

193

Dies ist wahrscheinlich eine meiner lästigsten Sachen, die die Leute die ganze Zeit durcheinander bringen. Das SUID / GUID-Bit und das Sticky-Bit sind zwei völlig verschiedene Dinge.

Wenn Sie eine tun man chmod, können Sie über die SUID und Sticky-Bits lesen. Die Manpage ist auch hier verfügbar .

Hintergrund

Auszug

Die Buchstaben rwxXst wählen Dateimodusbits für die betroffenen Benutzer aus: Lesen (r), Schreiben (w), Ausführen (oder Suchen nach Verzeichnissen) (x), Ausführen / Suchen nur, wenn die Datei ein Verzeichnis ist oder für einige Benutzer bereits Ausführungsberechtigungen hat Benutzer (X), Benutzer- oder Gruppen-ID bei Ausführung (en) , eingeschränktes Löschflag oder Sticky-Bit (t) festlegen .

SUID / GUID

Die obige Manpage versucht zu sagen, dass die Position, die das x-Bit im rwxrwxrwx für das Benutzeroktal (1. Gruppe von rwx) und das Gruppenoktal (2. Gruppe von rwx) einnimmt, einen zusätzlichen Zustand annehmen kann, in dem das x wird ein s. In diesem Fall wird diese Datei bei der Ausführung (wenn es sich um ein Programm und nicht nur um ein Shell-Skript handelt) mit den Berechtigungen des Eigentümers oder der Gruppe der Datei ausgeführt.

Wenn sich die Datei also im Besitz von root befindet und das SUID-Bit aktiviert ist, wird das Programm als root ausgeführt. Auch wenn Sie es als normaler Benutzer ausführen. Gleiches gilt für das GUID-Bit.

Auszug

SETUID UND SETGID BITS

chmod löscht das Set-Group-ID-Bit einer regulären Datei, wenn die Gruppen-ID der Datei nicht mit der effektiven Gruppen-ID des Benutzers oder einer der zusätzlichen Gruppen-IDs des Benutzers übereinstimmt, es sei denn, der Benutzer verfügt über entsprechende Berechtigungen. Zusätzliche Einschränkungen können dazu führen, dass die Bits set-user-ID und set-group-ID von MODE oder RFILE ignoriert werden. Dieses Verhalten hängt von der Richtlinie und der Funktionalität des zugrunde liegenden chmod-Systemaufrufs ab. Überprüfen Sie im Zweifelsfall das zugrunde liegende Systemverhalten.

chmod behält die Bits set-user-ID und set-group-ID eines Verzeichnisses bei, sofern Sie nicht ausdrücklich etwas anderes angeben. Sie können die Bits mit symbolischen Modi wie u + s und gs setzen oder löschen, und Sie können die Bits mit einem numerischen Modus setzen (aber nicht löschen).

SUID / GUID-Beispiele

no suid / guid - nur die Bits rwxr-xr-x werden gesetzt.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & users ausführbares Bit aktiviert (Kleinbuchstaben) - die Bits rwsr-xrx werden gesetzt.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid enabled & executable bit disabled (Großbuchstabe S) - die Bits rwSr-xr-x werden gesetzt.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

Das ausführbare Bit von guid & group ist aktiviert (Kleinbuchstaben s) - die Bits rwxr-sr-x sind gesetzt.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid enabled & executable bit disabled (Großbuchstabe S) - die Bits rwxr-Sr-x werden gesetzt.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

klebriges Stück

Der Sticky - Bit auf der anderen Seite wird bezeichnet als t, wie mit dem /tmpVerzeichnis:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Dieses Bit hätte immer das "eingeschränkte Löschbit" heißen sollen, da es genau das ist, was es wirklich bedeutet. Wenn dieses Modusbit aktiviert ist, wird ein Verzeichnis so erstellt, dass Benutzer nur Dateien und Verzeichnisse darin löschen können, deren Eigentümer sie sind.

Auszug

EINGESCHRÄNKTE LÖSCHFLAGGE ODER KLEBENDER Keks

Das eingeschränkte Löschflag oder Sticky-Bit ist ein einzelnes Bit, dessen Interpretation vom Dateityp abhängt. Bei Verzeichnissen wird
verhindert , dass nicht privilegierte Benutzer eine Datei im Verzeichnis entfernen oder umbenennen , es sei denn, sie besitzen die Datei oder das Verzeichnis. Dies wird das eingeschränkte Löschflag für das Verzeichnis genannt und ist häufig in weltweit beschreibbaren Verzeichnissen wie / tmp zu finden. Bei normalen Dateien auf einigen älteren Systemen speichert das Bit das Textbild des Programms auf dem Auslagerungsgerät, damit es beim Ausführen schneller geladen wird. Dies nennt man das klebrige Stück.

slm
quelle
43
Tatsächlich konnte das Sticky-Bit zuvor auf ausführbare Dateien angewendet werden, was dazu führte, dass diese nach dem ersten Laden im Swap-Modus blieben. Dies könnte eine Menge unnötiger Festplatten- / Netzwerk- (NFS) und CPU-Auslastung für häufig verwendete Programme einsparen. Dies wird jedoch weder von Linux noch von den meisten (allen?) Unix-Systemen mehr unterstützt (es wurde aus dem Kernel entfernt). Es ist "sticky", weil die ausführbare Datei im Swap steckt. Darüber hinaus wurde es für Verzeichnisse verwendet, wie Sie beschreiben.
Baard Kopperud
4
Eigentlich wäre "viel benutzt oder sehr groß" eine bessere Beschreibung. Denken Sie daran, dass mein College 1995 den Netscape-Webbrowser als "sticky" auf seinem HP-UX-Computer hatte. So kleine Programme, die sehr häufig verwendet wurden (z. B. Systembefehle, die häufig von Cron ausgeführt wurden) und große Programme (z. B. Netscape) waren Hauptkandidaten, die "klebrig" gemacht werden sollten. In beiden Fällen wäre es verschwenderisch, sie ständig von der Festplatte / NFS neu zu laden.
Baard Kopperud
8
Sticky-Bit-Programme sollten im RAM und nicht im Swap gespeichert bleiben (das Laden eines Images aus einer Swap-Datei ist nicht viel schneller als das Laden von einer Dateisystem-Festplatte). Es war für wesentliche OS-Level-Befehle wie gedacht ls. Offensichtlich konnte nur der Superuser das Sticky-Bit für eine Datei setzen. Es wurde weniger wichtig, nachdem virtueller Speicher und gemeinsam genutzte Bibliotheken eingeführt wurden, und vor allem, als Pager intelligenter wurden und dynamisch entscheiden können, welche Seiten gespeichert werden sollen.
Alexis
4
Da die Eigenschaft sticky für ein Verzeichnis keinen Sinn ergab, wurde dasselbe Bit der Berechtigungsmaske später interpretiert, um die traditionelle Semantik für die Dateierstellung für Verzeichnisse zu ändern.
Alexis
5
@alexis: Ursprünglich wurden Sticky-Bit-Programme im Swap-Bereich aufbewahrt. Dies war viel schneller als das Lesen aus dem Dateisystem, da das Lesen von Auslagerungsdateibildern zusammenhängende Sektoren war und daher meistens asynchron gelesen werden konnte. Bei den frühen Dateisystemen gab es keine Sektor- "Lauflängen", und die meisten frühen Dateisystemtreiber lasen jeweils einen Sektor, selbst wenn die Sektoren zufällig aufeinanderfolgend waren. Das Ergebnis auf einem PDP-40 war, dass klebrige Programme augenblicklich geladen wurden, während nicht klebrige Programme die üblichen Sekunden oder zwei benötigten. Ich denke wir hatten nur edklebrig.
Wallyk
8

"Das Sticky-Bit, das auf ausführbare Programme angewendet wird, die das System markieren, um ein Abbild des Programms im Speicher zu behalten, nachdem das Programm beendet wurde."

Ich denke, das ist eine ziemlich veraltete Information, heutzutage ignorieren die meisten modernen Unixe dies. Unter Linux ist das Sticky-Bit nur für Verzeichnisse relevant. Siehe hier und den recht informativen Wikipedia-Artikel .

Wie auch immer, in diesem alten Verhalten wurde das Image (nur der "Code", nicht die Daten) nur im virtuellen Speicher gehalten - normalerweise ausgetauscht, nicht im realen Speicher, um es beim nächsten Mal schneller auszuführen.

Leonbloy
quelle
3

Was sind klebrige Teile?

Ein Sticky-Bit ist ein Berechtigungsbit für ein Verzeichnis, das nur dem Eigentümer der Datei in diesem Verzeichnis oder dem Root-Benutzer das Löschen oder Umbenennen der Datei ermöglicht. Kein anderer Benutzer verfügt über die erforderlichen Berechtigungen zum Löschen der von einem anderen Benutzer erstellten Datei.

Dies ist eine Sicherheitsmaßnahme, um das Löschen kritischer Ordner und ihrer Inhalte (Unterverzeichnisse und Dateien) zu vermeiden, obwohl andere Benutzer über vollständige Berechtigungen verfügen.

chandrakumar.M
quelle
1
Das stimmt nicht: de.wikipedia.org/wiki/Sticky_bit
AB
7
@AB Es scheint mir ziemlich genau zu sein, fast so weit, den Anfang des Wikpedia-Artikels zu paraphrasieren, den Sie zitieren. Was stimmt damit nicht?
Roaima
Ich würde sagen, dass die Antwort unvollständig ist. "Sticky" bedeutet auch, dass die ausführbare Datei im Swap-Bereich verbleibt, damit sie schneller ausgeführt werden kann. Nun, dies ist eine alte Geschichte, aber in älteren Dateisystemen haben Treiber immer nur einen Sektor gelesen, auch wenn die Sektoren zufällig aufeinanderfolgend waren. Dies machte nicht-klebrige ausführbare Dateien langsam, Klebrigkeit machte zu dieser Zeit sehr viel Sinn.
GhostCode