Hände weg von fremden Dateien: Dank eines ausgefeilten Rechte-Systems können Sie unter Linux Ihre Dateien für andere Benutzer freigeben oder sperren. Dazu setzen Sie entweder Kommandos wie chmod und chgrp ein oder legen schon im Vorfeld mit umask fest, wer was darf.
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Das Rechtesystem unter Linux ist gut geregelt: Jede Datei hat einen Besitzer, und detaillierte Zugriffsrechte legen fest, wer die Datei lesen, schreiben oder ausführen darf. Dabei unterscheidet Linux zwischen Zugriffsrechten für den Dateieigentümer, für Mitglieder einer Gruppe und für alle sonstigen Benutzer des Rechners. Natürlich gilt wie immer: Der Administrator root darf alles und sollte daher vorsichtig mit den hier vorgestellten Kommandos hantieren.
Mit dem Befehl chmod verändern Sie die Zugriffsrechte von Dateien – natürlich nur, wenn Sie der Eigentümer oder der Systemdministrator sind. Als root dürfen Sie darüber hinaus mit dem Befehl chown Dateien einen neuen Besitzer geben. Wer für neue Dateien Voreinstellungen für die Zugriffsrechte festlegen möchte, setzt das Kommando umask ein – wir zeigen einen Weg durch den “Rechtedschungel”.
Benutzer und Gruppen
Es gibt unter Linux drei Möglichkeiten, Benutzerrechte zu steuern: Zunächst einmal gibt es Rechte für den Dateibesitzer, dann für eine ganze Gruppe von Benutzern (jede Datei kann man genau einer Gruppe zuordnen) und schließlich für alle anderen Benutzer des Systems, die nicht in eine der beiden ersten Kategorien passen.
Das Konzept, mehrere Benutzer zu einer Gruppe zusammenzufassen, bringt viele Vorteile mit sich: So gibt es bei vielen Distributionen beispielsweise eine Gruppe namens audio – ihre Mitglieder dürfen unter anderem auf das Sound-Device (/dev/dsp) zugreifen. Der Zugriff auf CD-/DVD-ROM-Laufwerke ist auf den meisten Distributionen ähnlich geregelt. Mitglieder einer Gruppe teilen sich also bestimmte Rechte. Alle anderen Benutzer, die nicht zu der Gruppe gehören, werden unter “others” zusammengefasst.
Mit dem Kommando ls und dessen Option -l zeigen Sie außer dem Namen der Datei unter anderem den Typ, die Rechte, den Besitzer, die Gruppe und die Größe an (Kasten 1).
Kasten 1: Ausgabe von “ls”
huhn@open:~$ ls -l […] -rw-rw—- 1 huhn video 3002156 2004-05-24 20:29 bla.mpg -rw——- 1 huhn users 3526 2004-05-24 20:26 rechte.html drwx—— 3 huhn users 4096 2004-05-24 19:16 titelpix/ […]
Im ersten Feld dieser Ausgabe, der Kombination aus Buchstaben und Strichen, stehen die eigentlichen Zugriffsrechte der Datei. Im dritten Feld sehen Sie den Besitzer (Benutzer huhn), danach folgt die Gruppe (video oder users). Die Rechte lassen sich schnell entziffern: Das erste Zeichen bezeichnet den Dateityp. Der Bindestrich steht für eine “normale” Datei, das d bedeutet “directory” (Verzeichnis). Alternativ könnte hier ein b (blockorientiertes Gerät), c (zeichenorientiertes Gerät), l (symbolischer Link), p (FIFO-Datei, named pipe) oder s (Unix domain socket) stehen.
Als nächstes folgen drei Dreiergruppen, in denen jeweils r (read, lesen), w (write, schreiben) und x (execute, ausführen) stehen können. Steht an der Position statt einem dieser drei Buchstaben ein Minus-Zeichen, fehlt das entsprechende Recht. Die erste Dreiergruppe gehört zum Dateieigentümer, die zweite zur Gruppe und die dritte zu den sonstigen Anwendern. Für die Dateien aus dem ersten Beispiel gilt also: Die Datei bla.mpg ist für den Dateieigentümer (huhn) und für Mitglieder der Gruppe video les- und schreibbar. Alle anderen Benutzer auf dem System dürfen sie weder lesen noch schreiben; ausführen kann die Datei niemand, auch der Besitzer nicht.
Für Verzeichnisse haben diese neun Zugriffs-Flags eine leicht abweichende Bedeutung: r steht weiterhin für “readable”, das heißt, die jeweiligen Anwender (Eigentümer, Gruppenmitglieder, sonstige) können den Inhalt des Verzeichnisses mit ls betrachten. Ein x bedeutet, dass man mit dem Befehl cd hinein wechseln darf – aber nur wenn x und w beide gesetzt sind, darf man dort auch Dateien ablegen. Andernfalls erscheint die Fehlermeldung Keine Berechtigung.
Noch mehr Rechte
Neben Lesen, Schreiben und Ausführen gibt es aber noch weitere Rechte zu verteilen, zum Beispiel das s– und das t-Bit: Das s-Bit (Setuid-Bit) ist eine spezielle Zusatzangabe für ausführbare Dateien. Wenn man es für den Eigentümer und/oder für die Gruppe setzt, erscheint es in der ls-Ausgabe an der Stelle, an der sonst das x steht. Wenn man die mit s-Bit versehene ausführbare Datei startet, führt Linux sie mit den Rechten des Dateieigentümers und/oder der Gruppe aus.
Wenn Sie als Administrator das s-Bit für Programme setzen, die root gehören, kann das ein erhebliches Sicherheitsrisiko sein – normale Benutzer können die Datei ausführen, als wären sie root.
Für Verzeichnisse hat das s-Bit eine andere Bedeutung: Gibt es beispielsweise eine Gruppe von Anwendern, die in einer Abteilung einer Firma arbeiten, kann der Administrator eine Gruppe für diese anlegen und alle Benutzer der Gruppe hinzufügen. Anschließend legt er ein Verzeichnis an, ordnet es der neuen Gruppe zu und setzt das s-Bit für die Gruppe. Alle neu angelegten Dateien in diesem Verzeichnis gehören danach zu dieser Gruppe.
Das t-Bit wird auch Sticky-Bit genannt. Es ersetzt ebenso wie das s-Bit in der Darstellung das x-Flag. Bei Programmen ist es eher selten zu finden; es zeigt dem System dann an, dass ein Programm nach der Ausführung im Speicher bleiben soll anstatt wie üblich den Speicher freizugeben – das beschleunigt den Start von oft benutzten Programmen. Eine ganz andere Auswirkung hat das t-Bit auf Verzeichnisse: Normalerweise kann man jede beliebige Datei in einem Verzeichnis, für das man Schreibrechte besitzt, löschen, auch wenn die Datei einem anderen Benutzer gehört. Für Sammelverzeichnisse, wie zum Beispiel /tmp, in denen Dateien mehrerer Benutzer liegen, setzt man das t-Bit: Trotz Schreiberlaubnis in dem Verzeichnis können dann alle Benutzer nur noch ihre eigenen Dateien (und solche, für die sie Schreiberlaubnis haben) löschen. Achtung: Wenn man Eigentümer des Verzeichnisses ist, spielt das t-Bit keine Rolle – man darf in jedem Fall löschen.
Alles ändert sich
Das Kommando chmod erwartet als Parameter die neuen Zugriffsrechte und eine oder mehrere Dateien, die verändert werden sollen. chmod versteht zwei Schreibweisen für Rechte, die symbolische und die oktale. Wir beschreiben beide.
Die symbolische Schreibweise der Parameter verwendet die Buchstaben u (“user”, Eigentümer), g (“group”, Gruppe) und o (“others”, alle anderen) um zu definieren, wessen Rechte verändert werden sollen. Kombinationen dieser Buchstaben sind möglich, indem man sie ohne Leerzeichen hintereinander hängt. Danach folgt (wiederum ohne Leerzeichen) entweder ein + (Rechte kommen hinzu), ein - (Rechte werden weggenommen) oder ein = (setzt genau die Rechte, die im Aufruf angegeben sind). Als letztes gibt man die Rechte selbst an: mit r, w, x, s und t.
Um der Gruppe (g) zusätzlich das Lese- und Schreibrecht (rw) zu geben, verwenden Sie die Form chmod g+rw ...:
huhn@open:~$ ls -l rechte.html -rw——- 1 huhn users 3526 2004-05-24 20:26 rechte.html huhn@open:~$ chmod g+rw rechte.html huhn@open:~$ ls -l rechte.html -rw-rw—- 1 huhn users 3526 2004-05-24 20:26 rechte.html
Auf die gleiche Art und Weise nehmen Sie einer Gruppe gezielt Rechte weg:
chmod g-rw rechte.html
Sie können auch mehrere Schritte zu einem zusammenfassen – chmod ug=rx,u+s datei gibt zunächst dem Eigentümer und der Gruppe Lese- und Ausführrecht und setzt dann das s-Bit für den Eigentümer:
-r-sr-x— 1 huhn users 7641 2004-05-25 12:14 rechte.html*
Wenn Sie Rechte für den Eigentümer, die Gruppe und alle anderen ändern wollen, können Sie übrigens statt ugo auch mit a (für “all”) abkürzen.
Gut gezählt
Neben dieser symbolischen Schreibweise mit Buchstaben beherrscht chmod eine Variante mit drei- oder vierstelligen Oktalzahlen. Mit dieser Methode setzen Sie jedesmal alle Rechte mit einem Aufruf komplett neu. Anstelle der Abkürzungen u, g und o verwenden Sie Ziffern im chmod-Aufruf:
huhn@open:~$ chmod 644 rechte.html huhn@open:~$ ls -l rechte.html -rw-r--r-- 1 huhn users 7641 2004-05-25 12:14 rechte.html
Die Zahlen ergeben sich jeweils als Summe aus 4 (Leserechte), 2 (Schreibrechte) und 1 (Datei darf ausgeführt werden). Für Benutzer, Gruppe und andere addieren Sie also die Rechte, die Sie vergeben wollen: Lesen und Schreiben entspricht dann 4+2=6. Die erste Ziffer steht für den Eigentümer, die zweite für die Gruppe und die dritte für alle anderen. So übersetzen Sie 644 in -rw-r--r-- und 777 in rwxrwxrwx.
Spezial-Flags, wie die s– und t-Bits, können Sie ebenfalls in Oktalschreibweise ausdrücken: Sie setzen sie als weitere Ziffer vor die Dreiergruppe: 4 ist das s-Bit für den Eigentümer, 2 das s-Bit für die Gruppe und 1 das t-Bit. So setzt der Aufruf
chmod 4755 datei
die Rechte auf rwsr-xr-x – alle dürfen die Datei lesen und ausführen, zusätzlich ist das s-Bit für den Eigentümer gesetzt.
Tabelle 1: Bitte ein Bit: Rechte symbolisch und numerisch
| 0 | — |
| 1 | –x |
| 2 | -w- |
| 3 (= 2+1) | -wx |
| 4 | r– |
| 5 (= 4+1) | r-x |
| 6 (= 4+2) | rw- |
| 7 (= 4+2+1) | rwx |
Rekursion
Das Kommando chmod arbeitet rekursiv, wenn Sie den Parameter -R anhängen. Wollen Sie also einem Verzeichnis samt aller enthaltenen Dateien und Unterverzeichnisse die Schreibrechte für die Gruppe nehmen, tippen Sie:
chmod -R g-w verzeichnis
Problematisch wird dies beim x-Flag: Für Verzeichnisse muss es zwingend gesetzt sein, damit man hinein wechseln kann. So führt der Aufruf chmod -R 600 verzeichnis schnell zur Fehlermeldung Keine Berechtigung. Hinter den Kulissen passiert Folgendes: Bevor der Befehl die erste Datei im Verzeichnis erreicht, hat er bereits die Rechte des Verzeichnisses selbst auf 600 gesetzt – danach kann er aber nicht mehr in das Verzeichnis wechseln.
Mit einem kleinen Trick verändern Sie nur die Rechte von Dateien: Zusammen mit dem Befehl find basteln Sie eine Kombination aus Kommandos, die zunächst im Unterverzeichnis nach Dateien sucht, auf welche dann das Kommando chmod 600 ... angewendet wird. Unterverzeichnisse selbst bleiben dabei unangetastet.
find verzeichnis/ -type f -exec chmod 600 \{\} \;
Gruppen und Besitzer ändern
Mit dem Befehl chgrp ändern Sie die Gruppenzugehörigkeit von Dateien – mit der Einschränkung, dass Sie selbst Mitglied der neuen Gruppe sein müssen. Um herauszufinden, in welchen Gruppen Sie mitmischen dürfen, tippen Sie:
huhn@open:~$ groups users uucp dialout audio video
So ist es in diesem Szenario kein Problem, eine Datei der Gruppe video zuzuordnen:
huhn@open:~$ chgrp video bla.mpg huhn@open:~$ ls -l bla.mpg -rw-r--r-- 1 huhn video 3002156 2004-05-25 14:03 bla.mpg
Der Versuch, eine eigene Datei der Gruppe root “unterzuschieben”, scheitert jedoch:
huhn@open:~$ chgrp root bla.mpg chgrp: Ändern der Gruppe für »bla.mpg«: Die Operation ist nicht erlaubt
Auch für dieses Kommando gilt: Rekursion erreichen Sie mit dem Parameter -R.
Der Befehl chown ordnet Dateien neuen Besitzern zu – allerdings darf nur der Administrator root diesen Befehl ausführen. Nachdem Sie mit su zu root geworden sind, tippen Sie also chown neuerBesitzer datei.
Gut maskiert
Wer neu angelegten Dateien direkt bestimmte Rechte mitgeben möchte, setzt dazu das Kommando umask ein. Die Eingabe von umask ohne Optionen verrät die Voreinstellung:
huhn@open:~$ umask 0022
Die Ausgabe von umask ist eine vierstellige Oktalzahl – allerdings verrät das Kommando nicht etwa, welche Rechte vergeben werden, sondern zeigt vielmehr an, welche Rechte entzogen werden. Die Zahl 0022 bedeutet also, dass neue Dateien die Zugriffsrechte rw-r--r-- (644) und neue Verzeichnisse die Rechte rwxr-xr-x (755) erhalten (jeweils für die Gruppe und alle anderen wird 2, also “schreiben”, abgeschaltet). Dabei sollte man beachten, dass neu erzeugte Dateien nie standardmäßig ausführbar sind, während bei Verzeichnissen das x-Attribut gesetzt wird – wenn Sie es nicht durch eine entsprechende Umask verhindern.
Um die Maske zu ändern, tippen Sie umask und den neuen Wert. Sollen neu angelegte Dateien also auch von Gruppenmitgliedern schreibbar sein, stellen Sie dieses ein mit:
umask 0002
Beachten Sie, dass solche Änderungen nur temporär für die Dauer einer Bash-Sitzung gelten. Wer die umask dauerhaft setzen möchte, muss dieses in die Datei .profile oder .bashrc eintragen. Dort sollte dann umask 0002 stehen – ohne Anführungszeichen. Die Änderung tritt in Kraft, wenn Sie eine neue Bash starten oder die veränderte Konfigurationsdatei, beispielsweise durch den Aufruf . .bashrc, einlesen.
Wer nicht mit Oktalzahlen rechnen mag, kann umask auch in einer Form aufrufen, die an chmod erinnert: Nach
umask u=rwx,g=rx,o=
sind alle neu erzeugten Dateien von Benutzer und Gruppe lesbar und nur vom Benutzer schreibbar; für Verzeichnisse gilt das gleiche, aber Benutzer und Gruppenmitglieder können sie außerdem auch betreten.
Glossar
-
Oktalzahlen
-
Oktalzahlen sind – wie die sonst üblichen Dezimalzahlen, die sich aus den Ziffern 0 bis 9 zusammensetzen – eine von drei häufigen Zahlendarstellungen in der Computer-Welt, die ein anderes Ziffernsystem verwenden. Im Fall der Oktalzahlen werden nur acht Ziffern (0 bis 7) verwendet, so dass in dieser Kodierung auf 7 bereits 10 folgt. Die Oktaldarstellung eignet sich für die Zugriffsrechte besonders, da genau die Werte 0 bis 7, also alle Oktalziffern, möglich sind.





