Zugriffsrechte |
Was schon bekannt sein sollte... |
Wer dem Buch durch die einzelnen Kapitel folgte, hat schon Bekanntschaft
mit den wichtigsten Zugriffsmechanismen unter Unix geschlossen. Diese Rechte betreffen (die
Darstellung entspricht der ersten Kolonne des Kommandos ls -l
):
-rwxrwxrwx |
den Eigentümer, |
-rwxrwxrwx |
die besitzende Gruppe und |
-rwxrwxrwx |
alle anderen. |
Ein r in der entsprechenden Dreiergruppe, erlaubt das Lesen für den betreffenden Nutzerkreis, ein w steht für die Befugnis, die Datei zu ändern und das x erlaubt das Ausführen der Datei bzw. - im Falle von Verzeichnissen - die Erlaubnis, in jenes zu wechseln.
Ziel dieses Abschnitts |
Zunächst werden wir zwei spezielle Zugriffsrechte kennen lernen, die für gewisse Anwendungsfälle die üblichen Rechte "verbiegen". Des Weiteren werden Sie in der Lage sein, die Zugriffsrechte Ihrer Dateien nach Ihren Wünschen zu gestalten. Ebenso in diesem Abschnitt behandeln wir Dateiattribute, die einen anderweitigen Schutz der Daten gewährleisten.
Nach dem Studium dieses Abschnitts wissen Sie:
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 in diesem Fall 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 zeitaufwändige Schreiboperationen vermieden werden. Wird das Flag auf ein normales Verzeichnis 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 Benutzer 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 Benutzerkennung von user erhält.
Mit Hilfe des s-Flags kann die Benutzerkennung des Prozesses vom rufenden Benutzer/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).
Chmod -Symbolischer Modus |
Zum Ändern der Zugriffsrechte steht das Kommando chmod zur Verfügung:
Aufruf: chmod [options] <mode> <dateiname> |
Für die möglichen Optionen sei auf die Manuals verwiesen.
Symbolisch lassen sich die Rechte setzen durch eine Kombination aus der betreffenden Rechtegruppe:
Symbol | Rechtegruppe |
---|---|
u | Eigentümer (user) |
g | Gruppe (group) |
o | Andere (others) |
a | Alle (all) |
und den entsprechenden Rechten:
Symbol | Recht |
---|---|
r | Leserecht |
w | Schreibrecht |
x | Ausführungsrecht |
s | s-Bit setzen |
t | t-Bit setzen |
+ | Recht(e) hinzufügen |
- | Recht(e) entfernen |
= | Genau diese Recht(e) setzen |
user@sonne>ls -l hello -rw-r--r-- 1 user users 108 Apr 7 12:10 hello user@sonne>chmod a+w hello -rw-rw-rw- 1 user users 108 Apr 7 12:10 hello user@sonne>chmod g-rw,u+xs hello -rws---rw- 1 user users 108 Apr 7 12:10 hello |
Chmod -Numerischer Modus |
Abbildung 1: Nummerischer Modus von chmod
Rechte werden bitweise dargestellt, für Eigentümer, Gruppe und Andere.
Recht | Bitdarstellung | Wert |
---|---|---|
Execute | 0000 0001 | 1 |
Write | 0000 0010 | 2 |
Read | 0000 0100 | 4 |
rwx | 0000 0111 | 7 |
Jede Rechtegruppe wird durch einen numerischen Wert repräsentiert, die Sonderrechte (s,t) werden durch einen eigenen Wert dargestellt. Somit werden dem Kommando chmod maximal vier Werte übergeben (Abbildung). Fehlen Werte, werden diese von links her (!) als Null (keine Rechte) angenommen, d.h.
chmod 1 <datei> |
ist gleichbedeutend mit
chmod 0001 <datei> |
Für die Sonderrechte gelten folgende Bitdarstellungen:
Recht | Bitdarstellung | Wert |
---|---|---|
t-Flag | 0000 0001 | 1 |
s-flag der Gruppe | 0000 0010 | 2 |
s-Flag des Eigentümers | 0000 0100 | 4 |
user@sonne>ls -l hello -rw-r--r-- 1 user users 108 Apr 7 12:10 hello user@sonne>chmod 666 hello -rw-rw-rw- 1 user users 108 Apr 7 12:10 hello user@sonne>chmod 4706 hello -rws---rw- 1 user users 108 Apr 7 12:10 hello |
Voreinstellung für neue Dateien |
Neue Dateien/Verzeichnisse werden offensichtlich stets mit ein und denselben Zugriffsrechten erzeugt:
user@sonne> mkdir testdir user@sonne> touch testdat user@sonne> ls -ld test* -rw-r--r-- 1 user users 0 Apr 7 13:11 testdat drwxr-xr-x 2 user users 1024 Apr 7 13:11 testdir |
Zuständig für dieses Verhalten ist die so genannte umask, die oft in der Datei /etc/profile auf den Wert 022 voreingestellt wird. Zusätzlich wird noch eine Maximalmaske benötigt, die sich für Verzeichnisse und andere Dateien unterscheidet. Die bei der Erzeugung gesetzten Rechte entstehen nun, indem von der Maximalmaske der durch umask vorgegebene Wert subtrahiert wird:
Verzeichnisse | Dateien | |
---|---|---|
Maximalmaske | 777 | 666 |
umask | 022 | 022 |
Ergebnis | 755 | 644 |
Mit dem Kommando umask lässt sich die Voreinstellung ändern.
Besitzer ändern |
Wird eine Datei neu erzeugt, so ist ihr Eigentümer immer derjenige, der die Aktion veranlasste und die Datei gehört zur Default-Gruppe des Benutzers. Zum Ändern der Werte dienen die Kommandos chown (change owner) und chgrp (change group).
Den Besitzer einer Datei darf einzig Root ändern. Wäre dem nicht so,
könnten hintertriebene Hacker einem beliebigen Benutzer ein modifziertes Programm unterschieben,
das dann, mit dessen Rechten gestartet, ggf. allerlei Schindluder im System treiben könnte.
Etwas liberaler geht es bei Gruppen zu, wo der Besitzer Dateien beliebig zwischen
Gruppen, denen er angehört, hin und her jonglieren kann.
Beginnen wir mit dem Kommando chgrp:
Aufruf: chgrp [OPTIONEN]... GRUPPE DATEI... |
Um die Gruppenzugehörigkeit einer Datei zu wechseln, geben wir Folgendes ein:
user@sonne> ls -l datei -rw-r--r-- 1 user users 120 May 30 11:25 datei user@sonne> chgrp fibel datei user@sonne> ls -l datei -rw-r--r-- 1 user fibel 120 May 30 11:25 datei |
Das Beispiel funktioniert allerdings nur, wenn "user" Mitglied in den Gruppen "users" und "fibel" und Eigentümer von "datei" ist. "chgrp" kann auch auf Verzeichnisse angewandt werden, in dem Fall ist die Option "-R" hilfreich, um rekursiv alle enthaltenen Dateien/Verzeichnisse zu bearbeiten.
Das Kommando ändert, wird es auf einen symbolischen Link angewandt, die Datei, auf die der Link verweist. Mit der Option "-h" lässt sich zusätzlich die Gruppe des Links modifizieren (ab Linux-Kernel 2.2).
user@sonne> ls -l bla datei lrwxrwxrwx 1 user users 5 May 30 11:43 bla -> datei -rw-r--r-- 1 user users 120 May 30 11:25 datei user@sonne> chgrp fibel bla user@sonne> ls -l bla datei lrwxrwxrwx 1 user users 5 May 30 11:43 bla -> datei -rw-r--r-- 1 user fibel 120 May 30 11:25 datei user@sonne> chgrp users datei user@sonne> chgrp -h fibel bla user@sonne> ls -l bla datei lrwxrwxrwx 1 user fibel 5 May 30 11:43 bla -> datei -rw-r--r-- 1 user fibel 120 May 30 11:25 datei |
Mit chown kann sowohl der Besitzer einer Datei als auch deren Gruppenzugehörigkeit gesetzt werden.
Aufruf: chown [OPTIONEN]... BESITZER[.[GRUPPE]] DATEI... |
Die wichtigen Optionen arbeiten analog zu "chgrp"; also kann "-R" verwendet werden, um bei Verzeichnissen rekursiv deren Besitzer / besitzende Gruppe zu modifzieren. Im Unterschied zu "chgrp" bewirkt die Anwendung auf symbolische Links die Änderung deren Werte.
Soll nun nur der Besitzer geändert werden, wird dieser einfach angegeben:
root@sonne> chown newbie datei |
Soll die Gruppe gesetzt werden, ist dem Gruppennamen ein (Doppel)Punkt voranzustellen:
root@sonne> chown .fibel datei |
Wünscht man sowohl den Besitzer als auch die Gruppe zu wechseln, sind beide Namen durch einen Punkt oder Doppelpunkt voneinander zu trennen:
root@sonne> chown newbie:fibel datei |
Gibt man den neuen Besitzer an, gefolgt von einem (Doppel)Punkt, so wird als neue Gruppe dessen Defaultgruppe aus der Datei /etc/passwd verwendet.
Dateiattribute |
Die Anwendung von Attributen funktioniert nur auf dem Linux-Dateisystem "ext2".
Selbst der erfahrene Linuxer ist vor Fehlern nicht gefeit. Man stelle sich nur vor, man wollte alle Dateien aus einem Unterverzeichnis löschen:
user@sonne> rm -rf ~/DirToDelete/ * |
Das Beispiel sieht harmlos aus, birgt aber einen fatalen Fehler in sich: das Leerzeichen zwischen Pfadangabe und dem *. Verschwunden sind nicht die gewünschten Daten, sondern der komplette Inhalt des aktuellen Verzeichnisses (falls man die Berechtigung dazu besaß).
Linux bietet bekannterweise keine zuverlässige Methode des Wiederherstellens gelöschter Daten. Dafür ermöglicht das Linux-Dateisystem ext2 die Vergabe von Attributen für Dateien und Verzeichnisse. Sicher wird man aus Bequemlichkeit meist auf diese verzichten, aber essentielle Daten lassen sich somit zuverlässig schützen. Zum Setzen von Attributen dient das Kommando chattr, anzeigen lassen sie sich mittels lsattr:
a
Die Datei kann weder gelöscht noch deren bisheriger Inhalt verändert werden. Allerdings ist das Anhängen von Daten möglich. Dieses Attribut darf nur Root setzen.
user@sonne> lsattr test.txt; ls test.txt -------- test.txt -rw-r--r-- 1 user users 32 Dec 19 19:52 test.txt root@sonne> chattr +a test.txt user@sonne> rm test.txt rm: Entfernen von Żtest.txt½ nicht möglich: Die Operation ist nicht erlaubt user@sonne> cat < test2.txt >> test.txt; ls -l test.txt -rw-r--r-- 1 user users 64 Dec 19 19:53 test.txt |
d
i
s
S
Es existieren weitere Attribute, die aber in der momentanen Implementierung des ext2 nicht unterstützt werden.