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