With ACLs (Access Control Lists) one can control the access rights individually for each file or folder. For NFS4-mounted file systems, such as web pages mounted from www.math.uni-bielefeld.de, this can be done with the commands nfs4_getfacl (checking the current rights) and nfs4_setfacl (setting/changing the rights).
$> nfs4_getfacl /vol/www/$USER A::OWNER@:rwaDxtTcCy A::GROUP@:tcy A::EVERYONE@:tcy
These are the standard rights for folders on the web server. The owner has all rights, the others can only read what rights they (don't) have. The exact meaning of these right can be found with the command
man nfs4_acl
A group web page in folder /vol/www/user/UserX/grpweb shall be readable by the web server, and all members of the group wwwadmin shall have full access rights:
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:g:wwwadmin@math.uni-bielefeld.de:RWX grpweb nfs4_setfacl -a A:gfdi:wwwadmin@math.uni-bielefeld.de:RWX grpweb chmod -R g+rwX grpweb chmod go+x /vol/www/user/UserX # check the result nfs4_getfacl grpweb
Unfortunately, recursive setting of ACLs does not work properly on the web server. It is recommended to first prepare an empty folder with the required ACLs, and only then fill it with contents. The new files will inherit the ACLs from their parent folder. However, for each new file or folder, all group rights must be turned on, because the effective access rights are thoese of the ACLs, intersected with the Unix group access rights. The is best achieved recursively with the command
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