Zugriffsrechte Das Dateisystem - Inhalt Ändern der Zugriffsrechte Inhalt Index


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


Zugriffsrechte Das Dateisystem - Inhalt Ändern der Zugriffsrechte Inhalt Index