Was ist der Buchstabe "t" in der Ausgabe von "ls -ld / tmp"?

94

Bei der Ausführung des Befehls  ls -ld /tmpwürde die Ausgabe folgendermaßen aussehen:

drwxrwxrwt 30 root root 20480 Mar 11 14:17 /tmp

Ich habe also zwei Hauptfragen:

  • Was ist der Brief tnach den Berechtigungen?
  • Soweit ich weiß /tmp, werden temporäre Dateien erstellt, die sich auf verschiedene Benutzer im System beziehen. Wie kommt es, dass diese die Berechtigung haben rwxrwxrwx(777)?

Das scheint falsch für mich. Bitte ich brauche deine Hilfe, um zu verstehen, was hier vor sich geht.

Gemeinschaft
quelle
8
Lesen Sie den Wikipedia-Artikel , er ist besser als die Antworten hier.
Gilles
1
Siehe auch: unix.stackexchange.com/q/79395/4784
Martin Thoma
OK Warum wird dann, wenn ich ein Update oder ein neues rpm-Paket von / tmp installiere, das Sticky-Bit entfernt?

Antworten:

112

Was ist das Klebrige?

Ein Sticky-Bit ist ein Berechtigungsbit für ein Verzeichnis, das nur dem Eigentümer der Datei in diesem Verzeichnis, dem Eigentümer des Verzeichnisses 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.

Warum hat /tmpdas tklebrige Stückchen?

Das /tmpVerzeichnis kann von verschiedenen Linux-Benutzern verwendet werden, um temporäre Dateien zu erstellen. Was ist nun, wenn ein Benutzer eine Datei löscht / umbenennt, die von einem anderen Benutzer in diesem Verzeichnis erstellt wurde?

Nun, um diese Art von Problemen zu vermeiden, wird das Konzept des klebrigen Bits verwendet. Also für diese ein 777gegeben , aber die Sticky - Bit zu bewahren ist keine schlechte Idee.

Wie kann ich das Sticky-Bit für ein Verzeichnis einrichten?

Ich werde ein Sticky-Bit für ein Verzeichnis setzen, das testauf meinem Desktop aufgerufen wird .

Symbolischer Weg ( trepräsentiert das Sticky Bit):

chmod o+t ~/Desktop/test

oder

chmod +t ~/Desktop/test

Numerisch / Oktal (1, Sticky-Bit als Wert 1 an der ersten Stelle)

chmod 1757 ~/Desktop/test

Lassen Sie uns nun die Ergebnisse testen:

ls -li ~/Desktop/test

1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

So löschen / entfernen Sie ein klebriges Bit

chmod o-t ~/Desktop/test

Lassen Sie uns nun die Ergebnisse testen:

ls -li ~/Desktop/test

1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test

Quelle: „Was ist ein Sticky Bit und wie wird es unter Linux eingestellt?“ Bei The Linux Juggernaut

Maythux
quelle
13
Diese Verwendung des Sticky-Bits gilt nur für Verzeichnisse, nicht für Dateien. Früher bedeutete es für ausführbare Dateien, das Textsegment des Programms zu speichern, um es auszutauschen, anstatt es zu verwerfen, damit es schneller wieder ausgeführt werden kann. Heutzutage hat es für reguläre Dateien keine Bedeutung mehr.
Psusi
Was war das Textsegment eines Programms und wie würde es schneller werden, wenn es beibehalten würde?
BluePython
@BluePython Das 'Text'-Segment einer ausführbaren Datei ist der Teil, der den gesamten Maschinencode enthält: das tatsächliche ausführbare Bit. Gängige andere Segmente sind "Daten" für statische Daten und "BSS" für Daten, die alle Null sind (und daher nicht in der ausführbaren Datei gespeichert werden müssen).
Miles Rout
1
Gibt es einen Unterschied zwischen 't' und 'T' für die Verzeichnisberechtigung? @ psusi
Afshin
1
@Afshin: Da das tverbirgt, xwas anzeigt, ob alle Benutzer die Datei / das Verzeichnis ausführen können, benötigen wir eine andere Möglichkeit, dies anzuzeigen . Das Übliche ist, dass jeder es ausführen kann. In diesem Fall erhalten Sie ein normales t(anstatt eines x). Wenn nicht, erhalten Sie einen Großbuchstaben T(anstelle von a -). Quelle: Wikipedia.
Toby Bartels
25

Ein Sticky-Bit ist ein Berechtigungsbit für eine Datei oder ein Verzeichnis, mit dem nur der Eigentümer der Datei / des Verzeichnisses oder der Root-Benutzer die Datei löschen oder umbenennen kann. Kein anderer Benutzer hat die Berechtigung, die von einem anderen Benutzer erstellte Datei zu löschen.

Gelegentlich benötigen Sie ein Linux-Verzeichnis, das von allen Benutzern des Linux-Systems zum Erstellen von Dateien verwendet werden kann. Benutzer können in diesem Verzeichnis nach Belieben Dateien erstellen, löschen oder umbenennen.

Was ist nun, wenn ein Benutzer versehentlich oder absichtlich eine Datei löscht (oder umbenennt), die von einem anderen Benutzer in diesem Verzeichnis erstellt wurde?

Nun, um diese Art von Problemen zu vermeiden, wird das Konzept des klebrigen Bits verwendet. Da / tmp für diesen Zweck verwendet wird. Um das obige Szenario zu vermeiden, verwenden Sie / tmp Sticky Bit.

Zum Beispiel:

mkdir demo
chmod 777 demo

Ich habe auch zwei Dateien mit unterschiedlichen Benutzern in diesem Ordner mit der Berechtigung 777 erstellt.

ls -ld demo
drwxrwxrwx 2 guru guru 4096 Mar 11 18:17 demo

ls -l demo
-rwxrwxrwx 1 abhi abhi    0 Mar 11 17:11 file1
-rwxrwxrwx 1 anshu anshu   0 Mar 11 18:15 file2

Schalten Sie jetzt das klebrige Stück ein

 chmod +t demo/
 ls -ld demo
 drwxrwxrwt 2 guru guru 4096 Mar 11 18:17 demo

Was passiert nun, wenn ein Benutzer (abhi) den 2. Benutzer (anshu) umbenennen möchte?

mv /home/guru/demo/file2  /home/guru/demo/file3
mv: cannot move '/home/guru/demo/file2' to  '/home/guru/demo/file3': Operation not   permitted  

Der Ursprung des Sticky Bits

Unter Linux wird das Sticky-Bit nur für Verzeichnisse verwendet, die oben beschrieben wurden. In der Vergangenheit wurde es für etwas völlig anderes in regulären Dateien verwendet, und daher kommt der Name.

Wenn ein Programm ausgeführt wird, dauert es einige Zeit, bis das Programm in den Speicher geladen ist und der Benutzer es tatsächlich verwenden kann. Wenn ein Programm, zum Beispiel ein Editor, häufig von Benutzern verwendet wird, war die Startverzögerung damals ein Overhead.

Um diese Zeitverzögerung zu verbessern, wurde das Sticky-Bit eingeführt. Das Betriebssystem prüfte, ob das Textsegment der ausführbaren Datei im Auslagerungsbereich belassen wurde, wenn das Sticky-Bit für eine ausführbare Datei aktiviert ist. Dies machte es einfach, die ausführbare Datei beim erneuten Ausführen des Programms wieder in den RAM zu laden, wodurch die Zeitverzögerung minimiert wurde.

Moderne Systeme wie Linux verwalten ihren Cache mit ausführbaren Dateien und anderen Dateien automatisch und benötigen dafür kein Sticky Bit.

Quelle: "Linux Sticky Bit-Konzept mit Beispielen erklärt" bei The Geek Stuff

g_p
quelle
2

Ein Stickybit ist eine Umgehungsmethode, mit der freigegebene Verzeichnisse nicht versehentlich gelöscht werden. Wenn ein Verzeichnis ein Stickybit hat, kann es nur der Eigentümer oder der Stamm löschen, auch wenn jeder Benutzer die vollen anderen Berechtigungen haben kann.

/tmpist das gemeinsam genutzte Verzeichnis zwischen Prozessen und Benutzern und enthält daher das Stickybit, um sicherzustellen, dass kein Benutzer das Verzeichnis löschen kann, auch wenn dies die Berechtigung ist 777. Es muss so sein, dass Benutzer und Prozesse das Verzeichnis verwenden können ohne Konflikt in Berechtigungen.


quelle