Typische Listings im Langformat führen zu Ausgaben folgender Gestalt:
user@sonne> ls -l
|
Was die einzelnen Bits zu bedeuten haben, sollte bereits bekannt sein.
Betrachten wir nun aber folgende Ausgaben:
user@sonne> ls -ld /t*
|
Die erste Besonderheit betrifft das Bit "t" des Verzeichnisses /tmp
.
Der Buchstabe steht für "save program text on swap device" und bewirkt,
dass in dieses Verzeichnis zu schreibende Daten so lange wie möglich
nur in der Swap-Partition (bzw. Hauptspeicher) existieren und eventuell
erst beim Shutdown des Systems tatsächlich zurückgeschrieben
werden. Für kurzlebige Daten (temporäre Daten) kann ein solches
Verhalten zur Performancesteigerung beitragen, da zeitaufwendige Schreiboperationen
vermieden werden. Wird das Flag auf ein normales Verzeichniss angewandt,
darf dessen Besitzer Dateien anderer Benutzer aus diesem Verzeichnis nicht
löschen (das trifft auch auf /tmp!
zu). In diesem
Zusammenhang spricht man auch vom "Sticky Bit".
Zur Erläuterung des s-Bits "set user or group ID
on execution" betrachten wir ein kurzes C-Programmfragment, so wie das
Programm passwd
(dient zum Ändern des Passwortes) realisiert
sein könnte:
// Programmfragment passwd.c
|
Der Systemadministrator übersetzt das Programm und installiert es
mit folgenden Zugriffsrechten im Verzeichnis /usr/bin
:
-rwxr-xr-x 1 root shadow 32916 Dec 11 20:47 /usr/bin/passwd
|
Ein normaler Nutzer möchte nun sein Passwort ändern und startet
das Programm passwd
:
user@sonne> passwd
|
Was ist die Ursache?
Das Programm versucht, die Datei /etc/passwd
zum Schreiben zu
öffnen und scheitert natürlich, da nur Root die Schreibberechtigung
besitzt (dies darf auch nicht anders sein, sonst könnte jeder die
Passwörter manipulieren). Grund hierfür ist, dass der Prozess,
der das Programm ausführt, die Nutzerkennung von user
erhält.
Mit Hilfe des s-Flags kann die Nutzerkennung des Prozesses vom rufenden
Nutzer/Gruppe in die des Besitzers / der besitzenden Gruppe umgewandelt
werden, so dass passwd
nun "im Auftrag" von Root die Datei /etc/passwd
öffnet. Ein s-Bit darf nur bei Binärdateien gesetzt werden (keine
Shellskripte).