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 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 BITS-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
Es ist zu beachten, dass sich der BITS-Filer (Homeverzeichnisse, /vol/data) anders verhält als der Webserver mit den Webseiten.
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
Leider darf das nur der Besitzer der Dateien.
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
nfs4_setfacl -R -x A::User2@math.uni-bielefeld.de:rwatcy ~/ProjektXDabei 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 ~/ProjektXDann 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!
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.
man nfs4_acl man nfs4_getfacl man nfs4_setfacl