Zugriffsrechte auf Dateien und Verzeichnisse

 

Benutzer und Gruppen

 Unter UNIX werden alle Benutzer des Systems in Gruppen eingeteilt. Ein Benutzer kann mehreren Gruppen angehören. Eine der Gruppen ist die sogenannte Primärgruppe, die beim Anlegen einer Datei/eines Verzeichnisses eine wichtige Rolle spielt. In welchen Gruppen Sie Mitglied sind, finden Sie durch den Befehl groups heraus:

Beispiel:

gudrun@vieta[~]>>groups gudrun root fiz3 gdmaint mupmod mupdev modem muplib mupas sysadmin software mathnet gudrun@vieta[~]>> 

Gruppen werden den Benutzern vom Systemverwalter zugewiesen und können auch nur durch diesen geändert werden. Temporär können Sie Ihre eigene Primärgruppe umsetzen auf eine andere Gruppe, der Sie angehören: newgrp (new group) setzt Ihre Primärgruppe in der aktuellen Shell auf <tt>neueGruppe</tt> solange bis Sie die Shell z.B. mit CRTL-D beenden.

Beispiel:

gudrun@vieta[~/TEST]>>groups gudrun root fiz3 gdmaint mupmod mupdev modem muplib mupas sysadmin software mathnet gudrun@vieta[~/TEST]>>touch test-datei1 gudrun@vieta[~/TEST]>>ll test-datei1 -rw-r--r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>>newgrp mathnet Loading standard modules...done. Loading additional modules from ~/.modulefilesrc basic pem gnu openwin X11 tetex done. gudrun@vieta[~/TEST]>>touch test-datei2 gudrun@vieta[~/TEST]>>ll test-datei2 -rw-r--r-- 1 gudrun mathnet 0 Apr 25 08:37 test-datei2 gudrun@vieta[~/TEST]>> 

Eigenschaften von Dateien und Verzeichnissen

Der Zugriff auf Dateien und Verzeichnisse wird unter UNIX durch drei Benutzerklassen geregelt:

  • u für login user (der Besitzer)
  • g für group (die entsprechende Gruppe)
  • o für others (alle, die nicht in der Gruppe sind)

Beispiel:

gudrun@vieta[~/TEST]>>ls -al total 278 drwxr-xr-x 11 gudrun root 512 Apr 25 08:49 ./ drwxr-sr-x 58 gudrun mupas 4608 Apr 21 22:54 ../ [...] drwxr-xr-x 2 gudrun mupas 512 Apr 25 08:49 TEST-DIR/ -rw-r--r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 -rw-r--r-- 1 gudrun mathnet 0 Apr 25 08:37 test-datei2 gudrun@vieta[~/TEST]>> 

Bei dieser Ausgabe von ls -al sehen Sie pro Datei/Verzeichnis sieben Blöcke mit Informationen. Der erste Block besteht aus 10 Zeichen und repräsentiert den Typ der Datei sowie deren Zugriffsrechte. Der zweite Block ist eine Zahl, die die Anzahl der vorhandenen Verweise (Links) auf die Datei/das Verzeichnis angibt. Der dritte Block bezeichnet den Eigentümer der Datei, der vierte Block die Gruppe, die auf diese Datei Zugriff hat. Es folgen die Grösse der Datei (in Bytes), das letzte Modifikationsdatum und der Name der Datei/des Verzeichnisses.

Zugriffsrechte auf Dateien

Im ersten Block der Ausgabe von ls -al gibt das erste der zehn Zeichen den Typ der Datei/des Verzeichnisses an. Ein - bedeutet, dass es sich um eine (normale) Datei handelt. Ein d steht für Verzeichnis (directory), ein l für Verweis (link).
Die Zeichen zwei bis vier benennen die Zugriffsrechte für den Besitzer der Datei. Die Zeichen fünf bis sieben legen Zugriffsrechte für die anderen Mitglieder der Gruppe fest, zu der die Datei gehört. Die Zeichen acht bis zehn geben die Zugriffsrechte aller anderen Nutzer an.

Für jede der Benutzerklassen kann der Zugriff zum Lesen (read), zum Schreiben (write) oder zum Ausführen (execute) einzeln gesetzt werden, insgesamt können damit neun verschiedene Zugriffsrechte (protection bits) pro Datei/Verzeichnis vergeben werden. Die Dateizugriffsrechte bestimmen damit, wer in welchem Sinn auf den Inhalt der Datei zugreifen darf.

Beispiel:

-rw-r--r-- 1 gudrun mathnet 0 Apr 25 08:37 test-datei2 

Die Zugriffsrechte für test-datei2 sind in diesem Beispiel -rw-r--r--. Es handelt sich also um eine normale Datei. Die Benutzeringudrun hat als Eigentümerin sowohl Lese- als auch Schreibberechtigung. Alle anderen Mitglieder der Gruppe mathnet haben nur Leseberechtigung, alle anderen Benutzer ebenfalls. Sie können den Inhalt der Datei nicht verändern. Keiner hat ein Ausführungsrecht (x), das auch nur für ausführbare Dateien (also Dateien, die Programme enthalten) vergeben werden sollte. 

 

Zugriffsrechte auf Verzeichnisse

Durch die Zugriffsrechte für ein Verzeichnis wird der Zugriff auf die dort enthaltenen Dateien und Unterverzeichnisse kontrolliert. Sobald Sie Zugriff auf ein Verzeichnis haben, wird die Möglichkeit, einzelne Dateien zu lesen oder deren Inhalt zu verändern, von den Dateizugriffsrechten überwacht. Wie bei den Dateien kann der Zugriff auf Verzeichnisse zum Lesen (read), zum Schreiben (write) oder zum Ausführen (execute) für jede Benutzerklasse einzeln gesetzt werden. Im Vergleich zu den Dateizugriffsrechten gibt es bei Verzeichnissen zwei Besonderheiten zu beachten:

  1. Bei Verzeichnissen bedeutet die Ausführungserlaubnis (x), dass die entsprechenden Benutzer auf das Verzeichnis zugreifen dürfen, also z.B. in das Verzeichnis wechseln dürfen oder sich die Dateien im Verzeichnis mit ls auflisten lassen dürfen.
    Wichtig: Soll ein Benutzer auf ein Verzeichnis zugreifen dürfen, braucht er die Ausführungserlaubnis (x) für alle übergeordneten Verzeichnisse bis hinauf zur Wurzel (root-Verzeichnis:).
  2. Das Schreibrecht auf ein Verzeichnis bedeutet, dass berechtigte Benutzer Dateien anlegen und auch löschen können.
    Wichtig: Das Löschen einer Datei ist in diesem Fall auch dann möglich, wenn die entsprechende Gruppe gar keine Zugriffsrechte auf die Datei selbst besitzt.


Zugriffsrechte verändern

 

Die Zugriffsrechte auf eine Datei/ein Verzeichnis darf nur der Besitzer der Datei/des Verzeichnisses ändern. Dazu gibt es den Befehlchmod (change mode). Für chmod existieren zwei syntaktisch unterschiedliche Formen, die aber in der Wirkung gleich sind:

  1. Ändern von Zugriffsrechten durch chmod w?y wobei für
    w (Benutzerklasse) gesetzt werden kann: u (user), g (group), o (other), a (all)
    ? (Aktion) gesetzt werden kann: + (Recht hinzufügen), - (Recht wegnehmen)
    y (Zugriffsrecht) gesetzt werden kann: r (read), w (write), x (execute)

    Beispiele:

    gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw-r--r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>>chmod g-r test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw----r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>> 

    Die Gruppe darf die Datei nicht mehr lesen.

    gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw-r--r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>>chmod g-r test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw----r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>> 

    Alle Benutzer dürfen die Datei ausführen, die Gruppe darf wieder lesen. Beachten Sie, dass man mehrere Zuweisungen per Komma getrennt mit einem Kommando erledigen kann.

    gudrun@vieta[~/TEST]>>ls -al [...] drwxr-xr-x 2 gudrun mupas 512 Apr 25 08:49 TEST-DIR/ gudrun@vieta[~/TEST]>>chmod o-x TEST-DIR/ gudrun@vieta[~/TEST]>>ls -al [...] drwxr-xr-- 2 gudrun mupas 512 Apr 25 08:49 TEST-DIR/ 

    Andere (alle, die nicht Gruppenmitglieder sind) dürfen auf das Verzeichnis nicht mehr zugreifen. 

  2. Neuzuweisung aller Zugriffsrechte durch chmod ugo wobei die Werte für u,g,o wie folgt spezifiziert sind: <table border="1"> <colgroup><col width="100" /><col width="100" /><col width="100" /><col width="100" /></colgroup> <tbody> <tr> <td> </td> <td>user</td> <td>group</td> <td>other</td> </tr> <tr> <td>read</td> <td>4</td> <td>4</td> <td>4</td> </tr> <tr> <td>write</td> <td>2</td> <td>2</td> <td>2</td> </tr> <tr> <td>execute</td> <td>1</td> <td>1</td> <td>1</td> </tr> </tbody> </table> 

    Für die gewünschten Rechte werden die entsprechenden Spalten aufsummiert.
    Beispiele:

    gudrun@vieta[~/TEST]>>ls -al test-datei1 -rwxr-xr-x 1 gudrun root 0 Apr 25 08:37 test-datei1* gudrun@vieta[~/TEST]>>chmod 600 test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw------- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>> 

    Nur der Besitzer der Datei darf den Inhalt der Datei lesen und verändern.

  3. gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw------- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>>chmod 640 test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw-r----- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>> 

    Der Besitzer der Datei darf den Inhalt der Datei lesen und verändern, die Gruppenmitglieder dürfen den Inhalt lesen aber nicht verändern, alle anderen haben keine Zugriffsrechte.

    gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw-r----- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>>chmod 664 test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw-rw-r-- 1 gudrun root 0 Apr 25 08:37 test-datei1 gudrun@vieta[~/TEST]>> 

    Der Besitzer der Datei und alle Gruppenmitglieder dürfen den Inhalt lesen und verändern, alle anderen nur lesen.

    gudrun@vieta[~/TEST]>>ls -al total 278 [...] drwxr-xr-- 2 gudrun mupas 512 Apr 25 08:49 TEST-DIR/ gudrun@vieta[~/TEST]>>chmod 755 TEST-DIR/ gudrun@vieta[~/TEST]>>ls -al total 278 [...] drwxr-xr-x 2 gudrun mupas 512 Apr 25 08:49 TEST-DIR/ gudrun@vieta[~/TEST]>> 

    Der Besitzer hat vollen Zugriff auf das Verzeichnis, die Gruppe und alle anderen dürfen in dem Verzeichnis nur lesen (selbstverständlich nur die Dateien, die entsprechende Leserechte besitzen). 

chmod kann in beiden Formen mit der Option -R rekursiv verwendet werden.

Zugriffsrechte global voreinstellen

Bei jeder Erstellung einer Datei/eines Verzeichnisses werden die vom System voreingestellten Zugriffsrechte gesetzt. Diese Voreinstellung kann und sollte auf die eigenen Bedürfnisse angepasst werden. Dazu existiert das Kommando umask. Im Mathematiknetz wird der Wert von umask für jeden Benutzer in der Datei .cshrc auf den Wert 022 gesetzt, d.h. jede von einem Benutzer erzeugte Datei hat die vollen Zugriffsrechte für diesen Benutzer und Lese-Zugriffsrechte für alle anderen. Sinnvolle Werte von umask und ihre Bedeutung für neu angelegte Dateien und Verzeichnisse sind:

umask WertDateiVerzeichnis
022-rw-r--r--drwxr-xr-x
077-rw-------drwx------
027-rw-r-----drwxr-x---

Bitte passen Sie den Wert von umask Ihren Bedürfnissen an.

Das Kommando umask kann selbstverständlich auch in der aktuellen Shell verwendet werden. umask ohne Argument liefert die monentan gültige Einstellung von umask.

Beispiel:

gudrun@vieta[~/TEST]>>umask 22 gudrun@vieta[~/TEST]>>touch test-datei5 gudrun@vieta[~/TEST]>>ls -al test-datei5 -rw-r--r-- 1 gudrun root 0 Apr 25 09:49 test-datei5 gudrun@vieta[~/TEST]>>umask 077 gudrun@vieta[~/TEST]>>umask 77 gudrun@vieta[~/TEST]>>touch test-datei6 gudrun@vieta[~/TEST]>>ls -al test-datei6 -rw------- 1 gudrun root 0 Apr 25 09:49 test-datei6 gudrun@vieta[~/TEST]>> 

Wichtig: Wird eine Datei mit dem cp-Befehl kopiert, so werden die alten Zugriffsrechte der Datei übernommen, soweit umask diese Zugriffsrechte erlaubt. Zusätzliche Rechte werden nie gesetzt, da ja eine neue Datei mit den aktuellen Zugriffsrechten angelegt wird und der Inhalt der Ursprungsdatei dort hinein kopiert wird. Hat allerdings bereits eine Datei existiert, die durch den Kopiervorgang überschrieben wird, so bleiben deren alte Zugriffsrechte erhalten: 

Beispiel:

gudrun@vieta[~/TEST]>>umask 77 gudrun@vieta[~/TEST]>>ls -al test-datei* -rw-rw-r-- 1 gudrun root 0 Apr 25 10:02 test-datei1 -rw------- 1 gudrun root 15 Apr 25 10:03 test-datei6 gudrun@vieta[~/TEST]>>cp test-datei1 test-datei1-neu gudrun@vieta[~/TEST]>>cp test-datei6 test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei* -rw-rw-r-- 1 gudrun root 15 Apr 25 10:04 test-datei1 -rw------- 1 gudrun root 0 Apr 25 10:04 test-datei1-neu -rw------- 1 gudrun root 15 Apr 25 10:03 test-datei6 gudrun@vieta[~/TEST]>> 

Besitzrechte ändern

 Das Besitzrecht einer Datei/eines Verzeichnisses kann nur vom Systemverwalter geändert werden. Die Gruppenzugehöhrigkeit einer Datei/eines Verzeichnisses kann vom jeweiligen Besitzer der Datei mit dem Befehl chgrp (change group) geändert werden. Die Syntax für diesen Befehl lautet: chgrp Mit der option -R chgrp

Beispiel:

gudrun@vieta[~/TEST]>>ls -al test-datei* ls: No match. gudrun@vieta[~/TEST]>>touch test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw------- 1 gudrun root 0 Apr 25 10:12 test-datei1 gudrun@vieta[~/TEST]>>chgrp mupas test-datei1 gudrun@vieta[~/TEST]>>ls -al test-datei1 -rw------- 1 gudrun mupas 0 Apr 25 10:12 test-datei1 gudrun@vieta[~/TEST]>> 

 

Verzeichnisse gemeinsam nutzen

 Arbeitsgruppen möchten häufig für alle ihre Arbeitsgruppenmitglieder Dateien zentral zur Verfügung stellen. Dazu kann ein Verzeichnis, dass für die Gruppe volle Zugriffsrechte hat, genutzt werden: Beispiel:

gudrun@vieta[~/TEST]>>mkdir FUER_MUPAD gudrun@vieta[~/TEST]>>ls -al total 280 [...] drwx------ 2 gudrun root 512 Apr 25 10:22 FUER_MUPAD/ gudrun@vieta[~/TEST]>>chgrp mupas FUER_MUPAD/ gudrun@vieta[~/TEST]>>chmod 770 FUER_MUPAD/ gudrun@vieta[~/TEST]>>ls -al total 280 [...] drwxrwx--- 2 gudrun mupas 512 Apr 25 10:22 FUER_MUPAD/ gudrun@vieta[~/TEST]>>

Wichtig: Beachten Sie in diesem Fall bitte die folgenden Dinge:

  1. Jedes der Gruppenmitglieder kann nun in dem Verzeichnis Dateien anlegen und löschen. Der Löschvorgang einer Datei ist auch dann möglich, wenn Gruppenzugriffe für diese Datei gar nicht erlaubt sind.
  2. Eine von einem Gruppenmitglied angelegte Datei gehört diesem Gruppenmitglied und wird deshalb auf dessen quota angerechnet.
  3. Eine von einem Gruppenmitglied angelegte Datei kann trotzdem für die Gruppe nicht lesbar sein. Es müssen die Dateizugriffsrechte korrekt für die Gruppe gesetzt werden. Kontrollieren Sie in diesem Fall von Wert von umask (siehe Zugriffsrechte global voreinstellen) oder setzen Sie die Rechte per Hand (siehe Zugriffsrechte verändern).
  4. Eine von einem Gruppenmitglied angelegte Datei kann trotzdem immer noch nicht lesbar sein, da diese Person zwar Mitglied der richtigen Gruppe ist, aber eine andere Primärgruppe (siehe unter Benutzer und Gruppen) hat und die Datei deshalb mit der falschen Gruppe angelegt wurde. In diesem Fall kann nur der Eigentümer der Datei die Besitzrechte ändern. Alternativ kann man dieses Problem durch das Setzen des sogenannten Set-GID-Bits auf dem Verzeichnis umgehen. Damit bekommen alle in dem Verzeichnis angelegten Dateien automatisch die Gruppenzugehörigkeit des Verzeichnisses zugewiesen. 

    Beispiel:

    gudrun@vieta[~/TEST]>>ls -al [...] drwxrwx--- 2 gudrun mupas 512 Apr 25 10:43 FUER_MUPAD/ gudrun@vieta[~/TEST]>>touch FUER_MUPAD/test-datei1 gudrun@vieta[~/TEST]>>ls -al FUER_MUPAD/test-datei1 -rw-r----- 1 gudrun root 0 Apr 25 10:44 FUER_MUPAD/test-datei1 gudrun@vieta[~/TEST]>>chmod g+s FUER_MUPAD/ gudrun@vieta[~/TEST]>>ls -al [...] drwxrws--- 2 gudrun mupas 512 Apr 25 10:47 FUER_MUPAD/ gudrun@vieta[~/TEST]>> gudrun@vieta[~/TEST]>>touch FUER_MUPAD/test-datei2 gudrun@vieta[~/TEST]>>ls -al FUER_MUPAD/test-datei2 -rw-r----- 1 gudrun mupas 0 Apr 25 10:47 FUER_MUPAD/test-datei2 gudrun@vieta[~/TEST]>> 

  5. Probleme kann es ebenfalls mit der Zugriffskontrolle für Dateien geben, die für die Gruppe schreibbar sind. Bearbeiten nämlich zwei Personen dieselbe Datei simultan, so werden Änderungen verloren gehen. Bitte denken Sie daran, dieses Problem organisatorisch (z.B. durch eindeutige Absprachen oder durch ausschliessliches Arbeiten auf Kopien) zu lösen. Eventuell ist auch eine technisch unterstützte professionelle Lösung wie der Einsatz eines Versionenkontrollsystems (wie z.B. cvs) sinnvoll.