3.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 selbst ü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...

3.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

3.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 ohnehin nicht an die Dateien...

3.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.

 Impressum