Kapitel 4. Betrieb
Zurück | 4.12 Gruppen und Zugriffsrechte | Weiter

## 4.12 Gruppen und Zugriffsrechte

Unix-Betriebssysteme, und damit auch Debian GNU/Linux, sind dafür ausgelegt, dass mehrere Benutzer zur gleichen Zeit am System arbeiten können. Dabei müssen bestimmte private Dateien vor anderen Benutzern geschützt werden, aber auch Systemdateien müssen vor den Benutzern geschützt werden. Sie können dies sehr leicht selber überprüfen:

Melden Sie sich mit Ihrem Benutzernamen am System an, (benutzen Sie nicht den Zugang des Administrator (root)!), und geben Sie das Kommando `rm /etc/resolv.conf` ein:

    bash-2.03$ rm /etc/resolv.conf
    rm: remove write-protected file `/etc/resolv.conf'? y
    rm: cannot unlink `/etc/resolv.conf': Permission denied

Das System schützt diese Datei vor Veränderungen durch andere Benutzer als dem Administrator. Wenn jeder Benutzer Veränderungen an wichtigen Systemdateien vornehmen dürfte, würde dies schnell zu Problemen führen. Sehen wir uns die Datei einmal etwas näher an:

Geben Sie nun das Kommando `ls -l /etc/resolv.conf` ein. Sie bekommen diese Ausgabe:

    -rw-r--r-- 1 root root 119 Nov 02 1999 /etc/resolv.conf

Die Option `-l` des Kommandos `ls` gibt den Dateinamen sowie viele weitere Informationen zu der Datei aus. Diese Informationen sind ziemlich einfach zu verstehen. Die Größe der Datei ist 119 Byte, die Datei wurde zuletzt am 02. November 1999 geändert, und der Dateiname ist `/etc/resolv.conf`. Weiter links wird die Sache etwas komplizierter...

Kurz und knapp: `-rw-r--r--` steht für die eigentlichen Zugriffsrechte der Datei, die `1` steht für die Anzahl der (hard-) Links auf diese Datei (oder die Anzahl der Dateien in einem Verzeichnis), und `root root` bezeichnet den Besitzer sowie die Gruppe, zu der die Datei gehört.

Doch nun etwas ausführlicher...

### 4.12.1 Gruppen

Jede Datei auf Ihrem Debian GNU/Linux-System hat zwei Eigentümer: einen User und eine Gruppe. Das oben angeführte Beispiel ist da etwas verwirrend, es gibt sowohl einen User als auch eine Gruppe `root`. Gruppen sind, wie auch im echten Leben, Ansammlungen von Personen, sprich Benutzern auf einem System. Diese Mitglieder einer Gruppe können gemeinsamen Zugriff auf bestimmte Dateien haben, beispielsweise auf alle Dateien unterhalb von `/var/www/projekte/debian/`, wenn sie gemeinsam an den Webseiten zu einem Debian-Projekt arbeiten sollen. Sie können auch beispielsweise bestimmte Benutzer der Gruppe `dialout` (bedeutet so viel wie „rauswählen“) zuordnen, damit diese per Modem eine Verbindung ins Netz herstellen können.

Das Kommando `groups` zeigt Ihnen an, zu welchen Gruppen Sie gehören. Dies ist abhängig von dem Benutzernamen, mit dem Sie sich am System angemeldet haben.

Sehen Sie sich nun die Datei `/etc/group` an; benutzen Sie hierzu beispielsweise das Kommando `more` (`more /etc/group`). Beachten Sie die Gruppe `root` (in dieser sollte als einziger der Benutzer `root` eingetragen sein) sowie Ihre eigene Gruppe (auch hier sollten nur Sie eingetragen sein). Es gibt einige weitere Gruppen in dieser Datei, beispielsweise `dialout` (siehe oben), `floppy` (diese Benutzer können auf das Diskettenlaufwerk zugreifen) und andere. Nach der Installation sind keine weiteren Benutzer in den verschiedenen Gruppen aufgeführt; diese hinzuzufügen ist die Aufgabe des Systemverwalters, also Ihre `;-)`. Hier sehen Sie ein Beispiel für eine veränderte Datei `/etc/group` aus einem laufenden System:

    root:x:0:
    daemon:x:1:fr
    bin:x:2:
    sys:x:3:
    adm:x:4:
    tty:x:5:
    disk:x:6:
    lp:x:7:lp
    mail:x:8:fr,mw
    news:x:9:
    uucp:x:10:
    proxy:x:13:
    kmem:x:15:
    dialout:x:20:fr
    fax:x:21:fr
    voice:x:22:fr
    cdrom:x:24:fr
    floppy:x:25:fr
    tape:x:26:fr
    sudo:x:27:fr
    audio:x:29:fr
    dip:x:30:
    majordom:x:31:majordom
    postgres:x:32:
    www-data:x:33:fr
    backup:x:34:fr
    msql:x:36:fr
    operator:x:37:fr
    list:x:38:fr
    irc:x:39:fr
    src:x:40:fr
    gnats:x:41:
    shadow:x:42:
    utmp:x:43:telnetd
    video:*:44:
    staff:x:50:fr
    games:x:60:fr
    qmail:x:70:
    users:x:100:fr
    telnetd:x:101:
    fr:x:1000:
    mw:x:1001:
    fr2:x:1003:
    nogroup:x:65534:
    mysql:x:102:

Weitere Informationen zu dieser Datei bekommen Sie mit dem Kommando `man group`.

Mit dem Kommando `ls -l /home` können Sie sich einen Überblick über die Stammverzeichnisse aller Benutzer auf dem System verschaffen. Jedes Verzeichnis sollte auch dem dazugehörigen Benutzer gehören. Wenn Sie das System neu installiert haben, werden Sie der einzige Benutzer sein. Deshalb auch hier ein Beispiel aus der Praxis mit wenigen Benutzern:

    bash-2.03$ ls -l /home/
    total 8
    drwxr-sr-x   65 fr       fr           5120 Jan  1 02:48 fr
    drwxr-sr-x    5 mw       mw           1024 Jan  4 08:27 mw

### 4.12.2 Zugriffsrechte

Neben dem Besitzer und der Gruppe, zu denen eine Datei gehört, verfügt jede Datei auch über Zugriffsrechte, über die festgelegt wird, wer diese Datei lesen, schreiben oder ausführen darf. Es gibt noch weitere Details, die wir aber übergehen wollen.

Wie Sie schon vorher gesehen haben, werden die Zugriffsrechte bei dem Kommando `ls -l` ganz links an den ersten zehn Stellen angezeigt. Die erste Stelle hat nicht direkt etwas mit den Zugriffsrechten zu tun, sie zeigt vielmehr den Dateityp an. Ein „ `-` “ steht für eine normale Datei, ein `d` kennzeichnet ein Verzeichnis, und ein `l` steht für einen Link.

Die weiteren neun Stellen lassen sich in drei Gruppen teilen. Dies sind von links nach rechts: der Besitzer der Datei (owner), die Gruppe (group) und schließlich die Allgemeinheit (world). Jeder dieser drei Gruppen gehören drei dieser neun Stellen. Jede dieser drei Stellen steht für `r` lesen (Read), `w` schreiben (Write) und `x` ausführen (eXecute).

Im Detail bedeuten die drei Buchstaben r, w und x Folgendes:

r - lesen: Bei Dateien kann der Inhalt der Datei gelesen werden. Bei Verzeichnissen kann man den Inhalt des Verzeichnisses auflisten lassen.

w - schreiben: Bei Dateien kann diese Datei verändert und gespeichert werden. Bei Verzeichnissen können neue Dateien angelegt und bereits bestehende Dateien gelöscht werden.

x - ausführen: Dateien können als Kommando ausgeführt werden. Dies macht nur Sinn, wenn diese Datei wirklich ein Kommando darstellt. Sie können eine Grafik ausführbar machen, es ergibt aber keinen Sinn. Da Verzeichnisse nicht ausgeführt werden können, bedeutet hier ein gesetztes `x`, dass Sie in dieses Verzeichnis wechseln können. Um also in einem Verzeichnis mit Dateien arbeiten zu können, benötigen Sie die Kombination `x` und `r` sowie gegebenenfalls auch `w`.

Für Verzeichnisse ist dies alles ein wenig verwirrend, daher hier einige Beispiele:

`r--` Eigentümer, Gruppe oder andere können den Inhalt dieses Verzeichnisses auflisten. Die Dateien selbst können in dem Verzeichnis gelesen, gelöscht oder verändert werden, abhängig von den eigenen Zugriffsrechten.

`r-x` Dieser Modus erlaubt das Auflisten der Dateien in dem Verzeichnis und gibt den Zugriff auf die Dateien frei. Sie können allerdings keine neuen Dateien anlegen oder bestehende Dateien löschen. Das Ansehen und Verändern von Dateien ist erlaubt; Programme können ausgeführt werden, wenn dies von den Rechten der Dateien selbst her erlaubt ist.

`--x` Sie können auf die Dateien in dem Verzeichnis zugreifen, diese aber nicht auflisten. Sie müssen also wissen, welche Dateien sich in dem Verzeichnis befinden, um auf diese zugreifen zu können. Wenn es sich um ein Verzeichnis handelt, so kann in dieses gewechselt werden.

`rwx` Sie können alles mit den Dateien anstellen, solange die Rechte der Dateien selbst dies zulassen.

Daraus folgen einige interessante Tatsachen, die Sie beachten sollten:

Schreibrechte auf einem Verzeichnis entscheiden darüber, ob Sie eine Datei in einem Verzeichnis löschen dürfen. Eine Datei, deren Rechte auf nur-lesen gesetzt sind, kann gelöscht werden, wenn Sie die nötigen Rechte haben, um in diesem Verzeichnis zu schreiben! Weiterhin können Sie eine Datei in einem Nur-lesen-Verzeichnis nicht löschen, auch wenn Sie die nötigen Zugriffsrechte auf die Datei selbst haben.

Dies bedeutet auch, dass Sie, wenn Sie der Besitzer eines Verzeichnisses sind, auch die Dateien darin löschen können, sogar wenn diese dem Administrator (root) gehören.

Zugriffsrechte auf ein Verzeichnis haben also auch direkten Einfluss auf die Dateien in diesem Verzeichnis. An dieser Stelle kommen die Zugriffsrechte auf Dateien ins Spiel. Wenn Sie keinen Zugriff auf das Verzeichnis haben, spielen auch die Rechte an den Dateien für Sie keine Rolle, Sie kommen ja eh nicht an die Dateien...

#### 4.12.2.1 Einige Beispiele

Um die Zugriffsrechte von Dateien und Verzeichnissen zu verändern, steht unter Debian GNU/Linux das Kommando `chmod` zur Verfügung. Spielen wir einmal ein wenig damit herum:

Erzeugen Sie zunächst eine neue Datei, beispielsweise mit dem Kommando `touch testdatei`. Das Kommando `touch` wird normalerweise dazu benutzt, die Datei mit einem aktuellen „Zeitstempel“ zu versehen. Wenn Sie jedoch einen Dateinamen angeben, der noch nicht existiert, so wird eine Datei mit diesem Namen neu angelegt Sie hat dann eine Größe von 0 Byte. Überprüfen Sie dies mit dem Kommando `ls -l`, und werfen Sie einen Blick auf die Zugriffsrechte:

    bash-2.03$ touch testdatei
    bash-2.03$ ls -l testdatei
    -rw-r--r--    1 fr       fr              0 Jan 19 18:15 testdatei

Bei Ihrem Versuch wird die Datei natürlich einen anderen Zeitstempel haben, und Benutzer- und Gruppenzugehörigkeit entsprechen Ihrem Loginnamen. Die Zugriffsrechte (`-rw-r--r--`) werden von Debian GNU/Linux automatisch für neue Dateien auf die gezeigten Werte gesetzt. Sie können diese Vorgabe mit dem Kommando `umask` ändern.

Sehen Sie sich zunächst die Manpage zu `chmod` mit dem Kommando `man chmod` an. Wir werden hier nicht auf jedes Detail eingehen, sondern an einigen Beispielen zeigen, wie sich `chmod` mit verschiedenen Parametern auswirkt.

Führen Sie das Kommando `chmod u+x testdatei` aus. Sehen Sie sich die Veränderung mit `ls -l testdatei` an. Es wurden Rechte zum Ausführen (`x` - execute) der Datei für den Besitzer (`u` - User) hinzugefügt (`+` - Pluszeichen).

    bash-2.03$ chmod u+x testdatei
    bash-2.03$ ls -l testdatei
    -rwxr--r--    1 fr       fr              0 Jan 19 18:15 testdatei

Ein solches Kommando können Sie beispielsweise auf ein selbst geschriebenes Shellskript oder Perl-Programm anwenden, damit es auch ausführbar ist.

Wenn Sie nun noch möchten, dass niemand außer Ihnen einen Blick in Ihre Arbeit werfen kann, so müssen Sie die Rechte zum Lesen der Datei für die Gruppe (`g` - Group) sowie alle anderen Benutzer (`o` - Other) entfernen (`-` - Minuszeichen). Sie können dies mit dem Kommando `chmod go-r testdatei` erreichen:

    bash-2.03$ chmod go-r testdatei
    bash-2.03$ ls -l testdatei
    -rwx------    1 fr       fr              0 Jan 19 18:15 testdatei

Wie Sie gesehen haben, können Sie mit den Zeichen `+` (Plus) oder `-` (Minus) Rechte hinzufügen oder entfernen. Manchmal ist es damit etwas verwirrend, einen gewünschten Zustand herzustellen. Daher bietet `chmod` noch die Option `=` (Gleichheitszeichen), welche genau die angegebenen Rechte setzt und alle anderen löscht. Auch hier können Sie wieder die Buchstaben `ugo` (User, Group, Other) benutzen:

    bash-2.03$ chmod ugo=rx testdatei
    bash-2.03$ ls -l testdatei
    -r-xr-xr-x    1 fr       fr              0 Jan 19 18:15 testdatei

Die Datei ist nun für jeden Benutzer lesbar und kann auch von jedem ausgeführt werden. Weiterhin kann keiner der Benutzer diese Datei schreiben.

Entfernen Sie nun die Rechte zum Ausführen der Datei für alle Benutzer (`chmod a-x testdatei`), bei einer Testdatei brauchen wir diese nicht.

Versuchen Sie einmal, die Datei zu löschen. Zur Erinnerung: Sie hatten vor kurzem die Datei mit dem Kommando `chmod ugo=rx testdatei` behandelt. Löschen Sie also die Datei mit dem Kommando `rm testdatei`:

    bash-2.03$ rm testdatei
    rm: schreibgeschützte Datei "testdatei" entfernen?

Wenn Sie die Umgebungsvariablen nicht passend gesetzt haben, wird Ihnen die Fehlermeldung in englischer Sprache präsentiert.

Da Sie (und auch alle anderen) keine Rechte haben, die Datei zu schreiben, fragt das Kommando `rm`, ob Sie diese Aktion wirklich durchführen wollen. Dies ist eine spezielle Funktion von `rm` und hat eigentlich wenig mit den Zugriffsrechten zu tun. Wenn Sie die Datei wirklich löschen möchten, können Sie die Frage bestätigen. Stören Sie sich nicht an der Ausgabe der Rechte an Zahlenform des Kommandos `rm`; Sie können die Bedeutung in der Manpage nachlesen.

Zurück | Nach oben | Weiter
4.11 Dateien und Verzeichnisse | Zum Anfang | 4.13 Orientierung innerhalb von Debian

© 1999-2006 Frank Ronneburg - Dieser Inhalt ist unter einem Creative Commons Namensnennung - Nicht-kommerziell - Keine Bearbeitung Lizenzvertrag lizenziert (creativecommons.org/licenses/by-nc-nd/2.0/de/legalcode).