# Spezielle Zugriffsrechte

Typische Listings im Langformat führen zu Ausgaben folgender Gestalt:

`user@sonne> ls -l drwxr-xr-x 23 root root 1024 Feb 15 15:54 /usr -rwxr-xr-x 1 root root 110890 Dec 12 18:01 /usr/bin/zoo -rw-r--r-- 1 user users 9655 Apr 6 09:38 nis.tex`

Was die einzelnen Bits zu bedeuten haben, sollte bereits bekannt sein.

Betrachten wir nun aber folgende Ausgaben:

`user@sonne> ls -ld /t* drwxrwxrwt 7 root root 1024 Apr 7 10:07 /tmp user@sonne> ls -l /usr/bin/passwd -rwsr-xr-x 1 root shadow 32916 Dec 11 20:47 /usr/bin/passwd`

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 int main() { FILE *new; //... new = fopen ("/etc/passwd","a"); if ( new == NULL ) { perror("fopen"); // ... } //... }`

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 fopen: permission denied`

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).