Green Logo of Bielefeld University
Fakultät für Mathematik | Computerlabor
big picturebig picturebig picturebig picturebig picturebig picturebig picture
small picturesmall picturesmall picturesmall picturesmall picturesmall picturesmall picturesmall picturesmall picturesmall picture
ende

Vergabe von Dateirechten an andere User

Mit ACLs (Access Control Lists) kann man im Prinzip für jede Datei und jeden Ordner festlegen, welche User welche Lese- und Bearbeitungsrechte daran haben sollen. Bei NFS4-Filesystemen - bei uns sind das unter anderen die Homes und die Webseiten - geschieht dies mit den Hilfsprogrammen nfs4_getfacl (auslesen der Rechte) und nfs4_setfacl (setzen/ändern der Rechte).

$> nfs4_getfacl .
A::OWNER@:rwaDxtTcCy
A::GROUP@:tcy
A::EVERYONE@:tcy

Das sind die Standardrechte, wie sie für Verzeichnisse auf dem Webserver oder dem alten Fileserver angezeigt werden - der Besitzer darf alles, die andern dürfen nur nachsehen, welche Rechte sie (nicht) haben. Die genaue Bedeutung aller Rechte ist mit man nfs4_acl einzusehen. Auf dem neuen Filer sehen die Standardrechte leicht anders aus, sind aber in etwa äquivalent:

$> nfs4_getfacl .
A::OWNER@:rwaDxtTnNcy
A:g:Everyone@math.uni-bielefeld.de:tcy

Typische Anwendungsbeispiele

Es ist zu beachten, dass sich der BITS-Filer (Homeverzeichnisse, /vol/data) anders verhält als der Webserver mit den Webseiten.

  1. Das erste Beispiel bezieht sich auf den BITS-Filer mit einem Ordner im Homeverzeichnis. Drei Kollegen möchten für ein gemeinsames Projekt einen Ordner haben, in dem alle lesen und schreiben dürfen. User1 legt diesen Ordner bei sich im Homeverzeichnis an, und gewährt User2 und User3 Zugriff:

    mkdir ~/ProjektX
    # es ist zweckmäßig, auch sich selbst explizit Zugriff zu geben:
    nfs4_setfacl -R -a A::User1@math.uni-bielefeld.de:RWX ~/ProjektX
    nfs4_setfacl -R -a A::User2@math.uni-bielefeld.de:RWX ~/ProjektX
    nfs4_setfacl -R -a A::User2@math.uni-bielefeld.de:RWX ~/ProjektX
    chmod go+x ~
    # Ergebnis überprüfen:
    nfs4_getfacl ~/ProjektX

    Nach einer Parameteränderung auf dem BITS-Filer können ACLs leider nicht mehr an neu angelegte Dateien und Verzeichnisse vererbt werden. Der Besitzer der Dateien muss diese ACLs explizit setzen. Das geht am besten, indem man sie rekursiv auf die ACLs einer Referenzdatei setzt:

    nfs4_getfacl ~/ProjektX | nfs4_setfacl -R -S - ~/ProjektX
  2. Das zweite Beispiel bezieht sich auf ein Verzeichnis mit Webseiten auf dem Webserver. Die Gruppenwebseite im Ordner /vol/www/user/UserX/grpweb soll vom Webserver gelesen werden können, und alle Mitglieder der Unix-Gruppe wwwadmin sollen sie lesen und bearbeiten können:

    cd /vol/www/user/UserX
    nfs4_setfacl -a A::www-data@math.uni-bielefeld.de:RX grpweb
    nfs4_setfacl -a A:fdi:www-data@math.uni-bielefeld.de:RX grpweb
    nfs4_setfacl -a A:gfdi:wwwadmin@math.uni-bielefeld.de:RWX grpweb
    nfs4_setfacl -a A:g:wwwadmin@math.uni-bielefeld.de:RWX grpweb
    # diesen Befehl nur für Webseiten:
    chmod -R g+rwX grpweb
    chmod go+x /vol/www/user/UserX
    # Ergebnis überprüfen:
    nfs4_getfacl grpweb

    Das rekursive Setzen von ACLs funktioniert leider nicht richtig. Am besten präpariert man einen leeren Ordner wie oben, und füllt diesen anschließend. Die ACLs werden dabei vererbt. Nach dem anlegen neuer Dateien oder Verzeichnisse müssen bei diesen jeweils die Gruppen-Unixrechte hochgedreht werden (die eigentlichen Zugriffsrechte sind der Durchschnitt der ACLs und der Unix-Rechte). Das gschieht am besten rekursiv mit dem Befehl:

    chmod -R g+rwX grpweb

Erläuterungen

  • Die Rechte R, W und X sind Aliase, die für Rechtegruppen stehen, welche im Wesentlichen den Unix Lese-, Schreib- und Ausführ- bzw. Durchsuch-Rechten entsprechen. Man kann die Rechte auch feiner aufspalten, aber davon sei dem Anfänger abgeraten.

  • Rechte werden an sogenannte Principals vergeben. Das sind einerseits OWNER@ (der Besitzer der Datei), GROUP@ (die Gruppe, zu der die Datei gehört), EVERYONE@ (alle), sowie weitere benannte User und Gruppen, die in der Form some_user@math.uni-bielelfeld.de, bzw. some_group@math.uni-bielefeld.de angegeben werden. Diese benannten User und Gruppen sind unabhängig von Datei-Besitzer und Datei-Gruppe, und sollten bevorzugt genutzt werden.

  • Die Option -R sorgt dafür, dass die Einstellungen rekursiv für den ganzen Baum gemacht werden. Die Rekursion funktioniert leider nicht richtig auf dem Webserver.

  • Die Option -a fügt die Rechte hinzu; analog kann man mit -x die Sonderrechte für den User2 (oder eine Gruppe) wieder entfernen:

    nfs4_setfacl -R -x A::User2@math.uni-bielefeld.de:rwatcy ~/ProjektX

    Dabei müssen die angegebenen Rechte aber genau mit den vergebenen übereinstimmen, und sind für Dateien und Ordner verschieden (mit nfs4_getfacl auslesen!). Behelfsweise reicht es auch, die Sonderrechte für den User2 vom Wurzelordner zu entfernen - dann kommt er auch nicht mehr an die untergeordneten Dateien heran.

    Praktisch ist es dabei auch, nfs4_setfacl mit einem Editor aufzurufen:

    nfs4_setfacl -e ~/ProjektX

    Dann kann man die nicht mehr gewünschten Zeilen mit User2 einfach löschen und die geänderten Rechte abspeichern. Ergebnis mit nfs4_getfacl überprüfen!

  • Die Flags fdi sorgen dafür, dass die Einstellungen an neu angelegte Dateien (f) und Unterordner (d) vererbt werden. Das Flag i sorgt dafür, dass auch die Vererbungsflags vererbt werden. Falls Ordner beteiligt sind, muss man jeden Befehl zweimal ausführen, einmal ohne Vererbungsflags (setzt die eigentlichen Rechte) und einmal mit Vererbungsflags (setzt die Vererbung). Die Vererbung von ACLs funktioniert leider nicht mehr auf dem BITS-Filer, sodass dort auch keine Vererbungsflags gesetzt werden müssen.

  • Das Flag g zeigt an, dass das folgende Prinzipal, für das Rechte gesetzt werden sollen, eine Unix-Gruppe, und nicht einenen einzelnen User bezeichnet

  • Wichtig: es gibt einen signifikanten Unterschied im Verhalten des  BITS-Filers (/homes, /vol/data) einerseits, und des Webservers andererseits. Auf dem BITS-Filer geben sowohl Unix-Dateirechte wie auch ACLs direkt Zugriff. Man sollte deshalb die Unix-Dateirechte auf der Standardeinstellung (Rechte nur für den Besitzer) belassen, und alle Zugriffsrechte und Vererbungsregeln über ACLs regeln, auch jene für den Dateibesitzer. Insbesondere sollten auch für die Rechte des Besitzers Vererbungsflags gesetzt werden. Achtung: Neu angelegte Dateien auf dem BITS-Filer erben ihre ACLs leider nicht mehr. Man muss sie explizit setzen wie in Beispiel 1 oben.

    Auf dem Webserver dagegen entsprechen die effektiven Zugriffsrechte für andere User als den Besitzer dem Durchschnitt der Rechte aus den ACLs und den Unix-Dateirechten für die Gruppe. Aus diesem Grund müssen mit dem Befehl  chmod -R g+rwX auch Gruppenrechte vergeben werden. Dies sorgt dafür, dass alle Ordner und Dateien im Teilbaum Lese-, Schreib- und - soweit sinnvoll - Ausführ- bzw. Durchsuchrechte für die Gruppe bekommen (das große X sorgt dafür, dass das Gruppen-x-Bit nur für Dateien gesetzt wird, die schon ein x-Bit haben). Auf dem neuen Filer dagegen darf man gerade das nicht machen, weil sonst die ganze Gruppe vollen Schreibzugriff bekäme. Achtung: Die Unix-Gruppenrechte müssen für neu angelegte Dateien und Ordner von Hand gesetzt werden (oder rekursiv für den ganzen Baum). Leider werden sie nicht vererbt.

  • Wichtig: nach dem Ändern von ACLs immer mit nfs4_getfacl prüfen, ob man das gewünschten Ergebnis erzielt hat

  • Weitere (alle) Details findet man mit:

    man nfs4_acl
    man nfs4_getfacl
    man nfs4_setfacl