Rechteverwaltung

Aus wiki.archlinux.de

Unix-Dateirechte (nachfolgend Dateirechte oder Rechte) stellen unter UNIX und UNIX-Derivaten wie Linux den Standard-Berechtigungsmechanismus dar. Aufgrund der wenigen Optionen ist das System schnell zu verstehen, bietet aber aufgrund der großen Kombinationsvielfalt ausreichend viele Möglichkeiten, um auch auf Mehrbenutzersystemen eine solide Berechtigungsstruktur zu ermöglichen.

Häufig kommen inzwischen Zugriffskontrolllisten (Access Control Lists) zum Einsatz, die eine noch feinere Möglichkeit bieten, Zugriffsrechte zu vergeben. Auf durchschnittlichen Systemen ist dies aber nicht nötig, hier können problemlos die seit Jahrzehnten bewährten Dateirechte zum Einsatz kommen.

Berechtigte

Die Dateirechte beziehen sich auf drei Berechtigungsklassen: Eigentümer (user, u), Gruppe (group, g), und Sonstige (others, o), und greifen auch in dieser Reihenfolge. Wenn für die Gruppe der Datei nur Leserechte vergeben wurden, darf der Eigentümer der Datei trotzdem in diese schreiben, wenn das Eigentümer-Schreibrecht gesetzt wurde.

Eigentümer der Datei sind zudem die einzigen, die die Rechte einer Datei ändern können, oder der Datei eine neue Gruppe oder einen neuen Eigentümer zuweisen können. Anders als bei der Verwendung von ACLs ist bei der Verwendung der Dateirechte root immer in der Lage, Dateirechte und -Zuweisungen zu ändern.

Berechtigungen

Die Dateirechte basieren auf drei Berechtigungsstufen: Lesen (read, r), Schreiben (write, w) und Ausführen (execute, x). Diese Rechte verhalten sich bei Dateien und Verzeichnissen leicht unterschiedlich.

Wenn ein Benutzer Leserechte an einer Datei hat, so kann er diese nur lesend öffnen und keine Änderungen an der Datei vornehmen. Leserechte in einem Verzeichnis ermöglichen, darin vorhandene Dateien aufzulisten, allerdings können deren Dateirechte nicht angesehen werden, und es können auch keine Dateien erstellt oder gelöscht werden.

Schreibrechte ermöglichen dem Benutzer, Dateien zu bearbeiten. Hat ein Benutzer Schreibrechte für ein Verzeichnis, kann er Dateien und Verzeichnisse darin erstellen und löschen.

Der Benutzer kann bei gesetzter Ausführberechtigung Dateien (Programme) ausführen. Besitzt der Benutzer Ausführrechte für ein Verzeichnis, kann er sich dessen Inhalt (z.B. mittels ls) anzeigen lassen, und sieht dann auch die Rechte der einzelnen Dateien.

Wichtig: Dateirechte und Verzeichnisrechte dürfen nicht durcheinandergebracht werden. Wenn ein Benutzer in einem Verzeichnis lesen und schreiben darf, kann er in diesem Verzeichnis Dateien löschen, unabhängig davon, welche Dateirechte sie besitzen (Ausnahmen, siehe Besondere Rechte).

Besondere Rechte

Neben read, write und execute gibt es noch Setuid (set user ID, Benutzerkennung setzen), Setgid (set group ID, Gruppenkennung setzen) und Sticky („klebrig“). Auch diese Rechte haben wieder unterschiedliche Wirkungen.

Wenn eine Datei/ein Programm das Setuid-Bit besitzt, startet der Prozess nicht mit der User-ID des startenden Benutzers, sondern mit der User-ID, die die Datei besitzt. Verzeichnisse mit gesetztem Setuid-Bit vererben ihre Gruppe auf in diesem Verzeichnis angelegte Dateien/Verzeichnisse. Setgid funktioniert genau so mit der Gruppen-ID.

Das Sticky-Bit ist nur auf Verzeichnisse anwendbar, und definiert dort, dass nur der Eigentümer einer Datei in diesem Verzeichnis dessen Rechte ändern, und die Datei löschen kann, unabhängig davon, welche Rechte das Verzeichnis selbst sonst noch besitzt.

Notation

Es gibt drei Arten der Notation von Dateirechten: Die oktale Notation, die symbolische Notation, und die Operandennotation, die in Anlehnung an die symbolische Notation funktioniert. Für konkrete Beispiele siehe dort.

Bei der oktalen Notation wird jedem Rechte-Bit ein Zahlenwert zugewiesen: r = 4, w = 2, x = 1. Das Selbe gilt für Setuid, Setgid und Sticky. Daraus ergibt sich eine maximal vierstellige Zahlenkombination in der Reihenfolge sugo, wobei die Spezialrechte (s) bei 0 auch weg gelassen werden können.

Bei der symbolischen Notation wird für jede „Berechtigungseinheit“ angezeigt, ob diese Berechtigung gesetzt ist, wenn ja, wird der entsprechende Buchstabe dargestellt, falls nein, erscheint ein Minus-Zeichen. Zusätzlich wird die Art der Datei angegeben (normale Dateien z.B. erhalten ein -, Verzeichnisse ein d oder Links ein l). Daraus ergibt sich eine zehnstellige Zeichenkette.

Die Operandennotation wird – wie die oktale Notation – benutzt, um Dateirechte zuzuweisen, wohingegen die symbolische Notation lediglich zur Anzeige der Rechte z.B. bei einem ls verwendet wird. Sie setzt sich aus der zu berechtigenden Klasse, und einer Addition oder Subtraktion der Rechte zusammen.

Dadurch entsteht eine mindestens dreistellige Zeichenkette NOR wobei N u, g oder o (user, group oder other) ist, O der Operator +, - oder = ist, und R die hinzuzufügenden, oder abzuziehenden Rechte (r, w, und/oder x) sind. Bei Verwendung von = werden die Rechte für N unabhängig davon, was vorher eingestellt war, auf R gesetzt.

umask

Die umask bestimmt die Standardrechte einer Datei oder eines Verzeichnisses. Sie kann interaktiv gesetzt werden, oder aber auch in der Konfigurationsdatei der verwenden Shell bestimmt werden. Die umask wird von den Standardrechten (0666 bei Dateien und 0777 bei Verzeichnissen) abgezogen.

Wenn man die umask auf 0022 setzt, erhalten alle Dateien automatisch Lese- und Schreibrecht für den Besitzer der Datei, und Leserechte für die Gruppe und alle anderen. Bei Verzeichnissen darf der Besitzer alles, und die Gruppe und alle anderen das Verzeichnis öffnen und dessen Inhalt anzeigen.

Eine maximal sichere umask ist 0077, damit darf nur der Besitzer Dateien lesen und schreiben, und in Verzeichnissen alles. Die Gruppe und alle anderen haben keinerlei Rechte an den Dateien/Verzeichnissen.

Beispiele

Zur Rechteverwaltung werden chown, chgrp und chmod verwendet. Mittels chown kann der Eigentümer einer Datei oder eines Verzeichnisses verändert werden, mittels chgrp geschieht dies mit der Gruppe. chmod ermöglicht das Verändern der Dateirechte entweder mittels oktaler, oder Operandennotation.

Programme und Dateien

Ein Programm soll von allen Mitgliedern der Gruppe staff ausgeführt werden, und nur der Besitzer coder darf das Programm bearbeiten, alle anderen sollen keinen Zugriff haben.

chown coder programmdatei
chgrp staff programmdatei
chmod 750 programmdatei

Das Setzen der Gruppe durch chgrp kann im Stil vom user:group beim Aufruf von chown direkt mit angegeben werden. Ein Programm soll mit Rootrechten ausgeführt werden. Das Programm darf nur von Mitgliedern der Gruppe admins ausgeführt werden, andere sollen keinen Zugriff haben.

chown root:admins programmdatei
chmod 4650 programmdatei

Unabhängig der bisherigen Rechte sollen alle Leserechte auf eine Datei bekommen, und der Besitzer Schreibrechte.

chmod o+r,u+w dateiname

Der Besitzer einer Datei soll sie lesen und schreiben können, die Mitglieder der Gruppe users dürfen die Datei ebenfalls lesen und Schreiben, alle anderen sollen nur Lesezugriff haben.

chgrp users dateiname
chmod 664 dateiname

Es empfiehlt sich immer dann die oktale Notation zu benutzen, wenn vorherige Rechte komplett überschrieben werden sollen, und immer dann die Operandennotation zu benutzen, wenn einzelne Rechte entfernt oder gesetzt werden sollen – Auch wenn Notationen wie zum Beispiel u+rwx,g-wx+r,o-rwx möglich sind, ist 740 deutlich weniger fehleranfällig und auch kürzer.

Verzeichnisse

Niemand außer dem Eigentümer soll irgendwelche Rechte an dem Verzeichnis haben, zudem sollen alle Sonderrechte an dem Verzeichnis entfernt werden (dies bietet sich zum Beispiel für das Homeverzeichnis eines Benutzers an)

chmod 0700 verzeichnisname

Benutzer in der Gruppe users sollen Dateien in einem Verzeichnis lesen können, aber nicht den Verzeichnisinhalt anzeigen können, der Besitzer darf alles, alle anderen dürfen nichts.

chgrp users verzeichnisname
chmod 710 verzeichnisname

Unabhängig der bisherigen Rechte an dem Verzeichnis soll es auch allen anderen möglich sein, den Verzeichnisinhalt aufzulisten.

chmod o+rx verzeichnisname

Es soll ein gemeinsam genutztes Verzeichnis angelegt werden, in dem Benutzer in der Gruppe staff Dateien anlegen und löschen können, die Gruppe der Dateien automatisch angepasst wird, und die Nutzer Dateien von anderen lesen, aber nicht ändern können. Alle anderen Nutzer sollen keinen Zugriff haben.

chgrp staff verzeichnisname
chmod 3770 verzeichnisname

Es ist hier zu beachten, dass die Dateirechte entweder durch Verwendung einer entsprechenden umask von vornherein die richtigen Rechte besitzen, oder aber im Nachhinein von den Usern manuell g+r gesetzt wird.

Siehe auch

Weblinks