Benutzerrechte
Aus 4webmaster.de
|
ist Merkmal von::Dateien und ist Merkmal von::Verzeichnisse (nicht aber Verknüpfungen) haben eine Regelung der Benutzerrechte. Geregelt ist, wer welchen Zugriff auf die Datei oder das Verzeichnis hat.
Fehlerhaft gesetzte Benutzerrechte gehören zum Alltag jedes Administrators und sind ein ständiger Fehlerquell. Sind die Benutzerrechte zu restrikiv gesetzt, funktioniert es nicht. Sind sie zu lasch gesetzt, machen Sie sich zum leichten Ziel von Angreifern und gehen damit u.U. erhebliche rechtliche und finanzielle Risiken ein.
Wessen Zugriff wird geregelt?
Linux unterscheidet drei Berechtigungsstufen, für die sich die Benutzerrechte jeweils unterschiedlich einstellen lassen:
- der Eigentümer der Datei oder des Verzeichnisse (user)
- eine bestimmte Gruppe von Usern mit besonders privilegierten Zugriffsrechten (group)
- alle anderen (other)
Die Stufen enthalten einander, d.h. der Besitzer einer Datei hat immer auch alle Rechte der Gruppe und aller anderen. Die Gruppe hat zwar nicht die Rechte des Eigentümers, aber stets mindestens die Rechte aller anderen. Für jede dieser drei Stufen muss die erlaubte Art des Zugriffes einzeln festgelegt werden.
Zuoberst steht zusätzlich die Stufe root. User mit Rootrechten dürfen alles. Das folgende Diagramm veranschaulicht die Rechte der einzelnen Sufen:
Root
Eigentümer (u)
Gruppe (g)
alle Anderen (o)
Was für eine Art von Zugriff wird erlaubt oder verboten?
Drei verschiedene Zugriffsarten werden unterschieden:
- r = read = lesen erlauben oder verbieten
- w = write = schreiben erlauben oder verbieten
- x = execute = ausführen erlauben oder verbieten
Verzeichnisse kann man nicht ausführen. Sie haben aber trotzdem eine x-Zugriffsregelung. Bei Verzeichnissen bedeutet das Fehlen der x-Berechtigung, dass man sie nicht mehr mit dem Befehl cd betreten kann.
Siehe auch: erweiterte Dateirechtbits Setuid, Setgid sowie das Sticky Bit.
Mit welche Befehlen lassen sich die Benutzerrechte regeln?
Um die Benutzerrechte für eine Datei oder ein Verzeichnis zu setzen, müssen Sie für alle drei Klassen (u, g und o) jeweils alle drei Zugriffsarten regeln, d.h. Sie müssen in 3 x 3 = 9 Bereichen den Zugriff jeweils erlauben oder verbieten. Dazu können Sie den Befehl chmod verwenden.
Jede Datei und jedes Verzeichnis braucht außerdem einen Eigentümer. Mit dem Befehl chown können Sie den Eigentümer festlegen.
Weiterhin sind ja stets auch die Zugriffsrechte für eine bestimmte Gruppe mit besonders privilegierten Zugriffsrechten geregelt. Welche spezielle Gruppe das sein soll, legen Sie mit chgrp fest.
Benutzerrechte anzeigen
Mit dem Befehl
ls -hal
können Sie sich die Regelung der Benutzerrechte aller Dateien und Unterverzeichnisse im aktuellen Verzeichnis anzeigen lassen. Sie erhalten eine Ausgabe wie im folgenden Beispiel:
drwxrwxr-x 3 bjoern bjoern 4,0K 2007-08-08 17:04 images -rwxrwxr-x 1 bjoern bjoern 4,8K 2002-05-21 00:52 index.htm lrwxrwxrwx 1 bjoern bjoern 15 2007-08-08 18:07 wiki -> /var/www/wiki
Das erste Zeichen zeigt, ob es sich um eine Datei ("-"), ein Verzeichnis ("d") oder eine Verknüpfung ("l") handelt. Danach folgt die Regelung der Benutzerrechte:
- Wer darf was, also die Information die sich mit chmod ändern lässt. Hier z.B. rwxrwxr-x
- dann der Eigentümer (der sich mit chown ändern lässt), hier bjoern
- dann die Gruppe (die sich mit chgrp ändern lässt), hier ebenfalls , hier bjoern
und dann weitere Angaben.
Die neun Zeichen, in den die "Wer darf was"-Regelung dargestellt wird, gliedern sich in drei Blöcke. Die ersten drei Stellen beschreiben Sie die Rechte des Eigentümers. Die mittleren drei Stellen beschreiben die Rechte der Gruppe (also die Gruppe der User mit speziellen Rechten). Die letzten drei Stellen beschreiben die Rechte aller anderen.
Die Benutzerrechte, die ls für Verknüpfungen anzeigt, können Sie igorieren. Maßgeblich sind nur die Benutzerrechte des Verknüpfungszieles, die aber zeigt ls nicht an.
Typische Kombinationen
| Typ | Eigentümer | Gruppe | alle anderen | Oktal | Bedeutung |
|---|---|---|---|---|---|
| Verzeichnis | rwx | rwx | r-x | 775 | Verzeichnis mit Vollzugriff des Eigentümers und der Gruppe. Andere können lesen und das Verzeichnis betreten. |
| Verzeichnis | rwx | r-x | r-x | 755 | Typische Berechtigung für Verzeichnisse. Nur der Eigentümer hat Vollzugriff. Die Gruppe und Andere können lesen und das Verzeichnis betreten. |
| Verzeichnis | r-x | r-x | r-x | 555 | Nur-Lese-Verzeichnis für alle außer root. |
| Datei | rw- | rw- | r-- | 664 | Der Eigentümer und die Gruppe können die Datei verändern, andere nur lesen. |
| Datei | rw- | r-- | r-- | 644 | Typische Berechtigung für Textdateien. Nur der Eigentümer kann sie verändern, aber jeder kann sie lesen. |
| Datei | r-- | r-- | r-- | 444 | Nur-Lese-Datei für alle außer root. |
| Ausführbare Datei | rwx | r-x | r-x | 755 | Typische Berechtigung für Scripte und Programme. Nur der Eigentümer hat Vollzugriff. Die Gruppe und Andere können das Script ausführen und lesen. |
Erlaubte Zugriffsarten ändern
Der Befehl zum Ändern der erlaubten Zugriffsarten (read / write / execute) lautet chmod. Mit chmod können Sie die Benutzerrechte auf zwei verschiedene Weisen ändern:
- relativ zu den schon vorhandenen Rechten können Lese-, Schreib- oder Ausführungsrechte hinzugefügt oder entzogen werden. Dazu verwenden Sie ein relativ kompliziertes System von Optionen, das Sie der man-Page von chmod entnehmen können (Befehl:
man chmod), wenn die untenstehenden Beispiele nicht ausreichen. - absolut und unabhängig von den schon vorhandenen Rechten kann die Regelung der Benutzerrechte eindeutig festgelegt werden. Dazu geben Sie die gewünschten Rechte als dreistellige Oktalzahl an.
rwx bedeutet dabei 7, r-x ist oktal 5, und r-- ist 4. Die Oktalzahl 755 bedeutet also rwxr-xr-x.
Obige Übersicht gibt die Oktalzahlen der gängigsten Rechtekombinationen wieder.
Beispiele für absolute Änderungen:
| Anwendung auf | Befehl | Erklärung |
|---|---|---|
| Datei | sudo chmod 644 Name einer Textdatei | Erlaubte Zugriffsarten für typische Textdatei festlegen (siehe oben) |
| Verzeichnis | sudo chmod 755 Verzeichnisname | Erlaubte Zugriffsarten für typisches Verzeichnis festlegen (siehe oben) |
| Ausführbare Datei | sudo chmod 755 Name eines Scriptes | Erlaubte Zugriffsarten für typisches Script festlegen (siehe oben) |
| Verknüpfung | sudo chmod 755 Name einer Verknüpfung | Legt die erlaubten Zugriffsarten des Verknüpfungszieles fest |
Beispiele für relative Änderungen:
| Befehl | Erklärung |
|---|---|
| sudo chmod -w Dateiname | Allen die Schreibrechte entziehen |
| sudo chmod +x Name eines Scriptes | Eine reine Textdatei in ein ausführbares Script wandeln |
| sudo chmod u+w Dateiname | Dem Eigentümer ("u") Schreibrechte verleihen |
| sudo chmod ug+w Dateiname | Dem Eigentümer und der Gruppe ("ug") Schreibrechte verleihen |
| sudo chmod o-w Dateiname | Nur den Anderen ("o") die Schreibrechte entziehen |
Erlaubte Zugriffsarten rekursiv ändern
Die Benutzerrechte eines Verzeichnisses vererben sich nicht auf seine Unterverzeichnisse. Stattdessen können Sie die erlaubten Zugriffsarten eines Verzeichnisses (theoretisch) mit dem Befehl chmod -R rekursiv ändern. D.h. sie ändern nicht nur die erlaubten Zugriffsarten des einen Verzeichnisses, sondern auch die aller darin enthaltenen Dateien und Unterverzeichnisse (und deren Dateien).
Der Haken dabei ist: Dateien und Verzeichnisse bekommen die gleichen erlaubten Zugriffsarten. Das wollen Sie ganz sicher nicht! Eine rekursive Zuweisung, die nur für Dateien (oder nur für Verzeichnisse) gilt, beherrscht chmod nicht. Damit ist die Verwendung der Option -R meist unpraktikabel.
Mit folgendem Befehl können Sie die erlaubten Zugriffsarten aller Verzeichnisse rekursiv auf den Standardwert 755 ändern:
sudo find /name/des/verzeichnisses/ -type d -exec chmod 755 {} \;
Und mit folgendem Befehl ändern Sie die erlaubten Zugriffsarten aller Dateien, die sich im Verzeichnis befinden, rekursiv auf den Standardwert 644 für Textdateien:
sudo find /name/des/verzeichnisses/ -type f -exec chmod 644 {} \;
Enthält ihr Verzeichnis auch Verknüpfungen? Dann überprüfen Sie, ob obige Befehle die Benutzerrechte der Verknüpfungsziele korrekt gesetzt haben. Ich habe es nicht ausprobiert.
Eigentümer und Gruppe ändern
Die Regelung der Benutzerrechte bezieht sich wie oben ausgeführt auf drei verschiedene Berechtigungsstufen: Was darf der Eigentümer, was darf die besonders privilegierte Gruppe (auch Eigentümergruppe genannt), was dürfen alle anderen.
Das bedeutet, dass Sie für jede Datei und jedes Verzeichnis festlegen müssen, wer der Eigentümer ist und welche Gruppe privilegierten Zugriff bekommen soll. Mit dem Befehl
chown apacheuser eindateiname
ändern Sie den Eigentümer der angegebenen Datei auf den User apacheuser. Mit
chown -R bjoern /ein/verzeichnisbaum
ändern Sie den Eigentümer des angegebenen Verzeichnisses und seines kompletten Inhaltes inkl. aller Unterverzeichnisse rekursiv auf den User bjoern.
Wollen Sie nicht den Eigentümer festlegen, sondern die Gruppe, dann verwenden Sie statt chown den Befehl chgrp. Der Syntax ist identisch.
