Erweiterte Datei-Zugriffsrechte unter Unix
Rechenzentrum » Dienste » Software » Dokumentationen

Worum es auf dieser Seite geht

Falls Sie als Benutzer eines zentralen UNIX-Servers am Rechenzentrum Dateien gemeinsam mit anderen Benutzern bearbeiten wollen, stoßen Sie eventuell auf Probleme mit dem klassischen UNIX-Rechteschema. Diese Seite soll einen Ausweg zeigen.

Das alte Schema

Beim Zugriff auf Dateien wird zwischen "Besitzer", "Gruppe" und "Andere" (User Group Others) unterschieden. Wenn jemand, mit dem Sie eine Datei teilen möchten, nicht in der selben Gruppe ist, können Sie sie also bestenfalls noch für alle anderen zugreifbar machen - das ist selten das, was Sie wollen. Der klassische Ausweg besteht darin, daß der Systemadministrator eine neue Gruppe anlegt, in der sich alle nötigen Benutzer befinden. Doch es geht auch anders...

ACLs

Moderne UNIXe und UNIX-artige Systeme haben außer den klassischen Zugriffsrechten auch noch sogenannte "Access Control Lists", ACLs. Damit können Rechte wesentlich differenzierter (und manchmal auch unübersichtlicher) vergeben werden. Einzelnen Benutzern oder einzelnen Gruppen können Rechte an dieser Datei gegeben werden. Sie können also Benutzer A Leserechte und Benutzer B Schreibrechte zuteilen, egal in welche Gruppe diese sind.

Anwendung von ACLs

Leider sind ACLs bei jeder Unix-Variante etwas anders zu benutzen. Allen gemeinsam ist, daß die entsprechenden Kommandos in der Regel nicht bei über das Netz eingebundenen Dateisystemen funktionieren. Wenn Ihr Home-Verzeichnis also auf dem Superdome liegt und sie Dateien dort verfügbar machen wollen, müssen Sie dafür auch dort eingeloggt sein.

Erkennung und Anzeige von ACLs

  • Unter SunOS ist in der "ls" Anzeige noch ein "+" bei den Dateirecheten angehängt.
    bash-2.05$ ls -l
    total 2
    -rw-------+  1 benutzer gruppe        7 Nov 11 15:37 bla
    -rw-------   1 benutzer gruppe        0 Nov 11 15:31 foobar
    
    Zur Datei "bla" existieren also mehr Rechte, als auf den ersten Blick erkennbar ist. Welche das sind, läßt sich mit getfacl bla in Erfahrung bringen.
    bash-2.05$ getfacl bla
    
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeA:rw-               #effective:rw-
    group::---              #effective:---
    mask:rwx
    other:---
    
    Hier ist zu erkennen, daß der Benutzer "kollegeA" die Datei lesen und schreiben darf. Rechts ist zu sehen, daß die ihm zugeteilten Rechte (rw) mit den tatsächlichen Rechten übereinstimmen, da die "mask" ihm prinzipiell rwx zugesteht.

  • Unter AIX bekommt man nur dann den "+" Hinweis, wenn man "ls" mit einem "-e" als Parameter aufruft. Der Befehl zur Anzeige der Rechte ist "aclget"
    bash-2.05$ aclget bla
    attributes: 
    base permissions
        owner(benutzer):  rw-
        group(gruppe):  ---
        others:  ---
    extended permissions
        enabled
        permit   rw-     u:kollegeA
    
  • HP-UX (hpux, sdome) zeigt das bekannte "+" beim ls -l an. Zusätzlich wird an dem Platz, der eigentlich für die Gruppenrechte vorgesehen ist, angezeigt, was noch für Rechte außer denen des Besitzers der Datei existieren.
    bash-2.05$ ls -l bla
    -rw-rw----+  1 benutzer   gruppe          7 Nov  7 15:31 bla
    bash-2.05$ getacl bla
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeA:rw-
    group::---
    class:rw-
    other:---
    
    Die Anzeige von ls läßt also vermuten, die Gruppe hätte Lese- und Schreibrechte. getacl zeigt den tatsächlichen Zustand an. Der "class" Eintrag entspricht der "mask" unter SunOS.

Festlegung von ACLs

Die exakte Beschreibung mit allen Optionen findet sich auf den jeweiligen Manual-Pages (SunOS: man setfacl, AIX: man aclput, HP-UX: man setacl. Im folgenden ein Beispiel: Der Benutzer kollegeB soll jeweils Leserechte auf die Datei "bla" bekommen.

  • SunOS:
    bash-2.05$ setfacl -m u:kollegeB:r-- bla
    bash-2.05$ getfacl bla
    
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeB:r--               #effective:r--
    user:kollegeA:rw-               #effective:rw-
    group::---              #effective:---
    mask:rwx
    other:---
    
    Die "Maske" für die erweiterten Rechte muß natürlich das erlauben, was Sie vergeben möchten. Sie können diese Maske mit setfacl -m m:r-x bla beispielsweise auf "alles außer schreiben" setzen.

  • AIX ist leider nicht sehr freundlich. Es erwartet die Eingabe der ACL in Langform, alternativ kann man diese mit acledit bearbeiten.
    bash-2.05$ aclget bla
    attributes: 
    base permissions
        owner(benutzer):  rw-
        group(gruppe):  ---
        others:  ---
    extended permissions
        enabled
        permit   rw-     u:kollegeA
    bash-2.05$ aclput bla << ENDE
    > attributes: 
    > base permissions
    >     owner(benutzer):  rw-
    >     group(gruppe):  ---
    >     others:  ---
    > extended permissions
    >     enabled
    >     permit   rw-     u:kollegeA
    >     permit   r--     u:kollegeB
    > ENDE
    
  • Unter HP-UX sieht es wieder so ähnlich aus wie unter SunOS:
    bash-2.05$ getacl bla
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeA:rw-
    group::---
    class:rw-
    other:---
    bash-2.05$ setacl -m u:kollegeB:r-- bla
    bash-2.05$ getacl bla
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeB:r--
    user:kollegeA:rw-
    group::---
    class:rw-
    other:---
    
    Für die "class" gilt hier das selbe wie eben für die "mask" unter SunOS. Hier ist der einfachste Weg zur Änderung allerdings der über die Pseudo-Gruppenrechte: chmod g-w nimmt allen außer dem Besitzer die Schreibrechte. Für unsere Beispieldatei erhalten wir danach die Anzeige:
    bash-2.05$ getacl bla
    # file: bla
    # owner: benutzer
    # group: gruppe
    user::rw-
    user:kollegeB:r--
    user:kollegeA:rw-       #effective:r--
    group::---
    class:r--
    other:---
    

    Ein kleiner Hinweis zum Schluß

    Wenn andere Benutzer Ihre Dateien bearbeiten sollen, dann brauchen sie auch zumindest das Recht "x" für die übergeordneten Verzeichnisse. Bei Ihrem Home-Verzeichnis ist das normalerweise für andere nicht der Fall. Aber Sie wissen ja jetzt (hoffentlich), wie Sie beliebigen Benutzern dieses Recht geben können.