Dateirechte und ACLs
Mit den Standard-Unix-Dateiberechtigungen für Besitzer, Gruppe und den Rest kann man schon einiges machen, man stößt aber recht schnell an die Grenzen. Ich hatte folgende Situation:
- Mehrere Benutzer sollen eine Webseite bearbeiten können
- Der Web-Server muss die Dateien natürlich lesen können um sie auszuliefern
- Um über ein PHP-Skript Dateien hochladen zu können muss der Web-Server in einen Ordner schreiben dürfen. Aus Sicherheitsgründen soll er auch nur in diesen Ordner schreiben dürfen.
So kann man das alles lösen:
mkdir www
chown besitzer:bearbeiter www
chmod u=rwx,g=rwx,o= www
Damit legt man ein Verzeichnis an und legt den Besitzer “Besitzer” und die Gruppe “Bearbeiter” fest. Besitzer und alle in Bearbeiter dürfen alles in dem Verzeichnis, sonst darf niemand etwas. Bis jetzt darf der Web-Server auch nichts.
Um das zu lösen könnte man ihn (also den Benutzer www-data) einfach mit in die Gruppe Bearbeiter aufnehmen. Dadurch kann er aber überall hin schreiben, was ja nicht gewünscht ist. Hier kommen dann die ACLs ins Spiel.
setfacl -m u:www-data:r-x www
setfacl -m d:u:www-data:r-x www
Als erstes wird Bekommt der Benutzer (u:) www-data das Recht das Verzeichnis zu lesen und zu betreten (r-x). Und danach wird ein Standard-Eintrag (d:) angelegt, der dem Benutzer www-data diese Rechte auch für alle im Ordner www neu angelegten Ordner und Dateien erteilt.
Der Upload-Ordner, der ja vom Webserver beschrieben werden muss, kann mit
setfacl -m u:www-data:rwx upload
setfacl -m d:u:www-data:rwx upload
für den Webserver freigegeben werden. Die zweite Zeile ist nur nötig, wenn der Webserver auch Unterordner anlegen und darin schreiben soll. Ansonsten ist die Standard-ACL nicht nötig.
Jetzt bleibt allerdings noch ein Problem zu lösen: Die Dateien und Ordner, die der Webserver anlegt werden für die Benutzer, die die Webseite bearbeiten können nicht erreichbar sein, da sie dem Webserver und dessen Gruppe gehören. Hiermit kann man das lösen:
chmod g+s www
setfacl -m d:u:besitzer:rwx www
Erst wird das SetGid-Bit gesetzt. Das bedeutet, dass alle neu angelegten Ordner der selben Gruppe gehören wie der übergeordnete Ordner. Und als letztes wird noch eine Standard-ACL gesetzt, die dem Besitzer alle Rechte gibt. Nicht unbedingt nötig, aber sicher ist sicher.
Das einfachste ist, man macht das alles bevor man irgend welche Dateien in dem Ordner ablegt. Ansonsten muss man bei chmod, chown und setfacl mit der Option -R rekursiv alle Dateien und Ordner bearbeiten und hinterher alles noch einmal überprüfen.
Hier noch einmal die ACL-Befehle im Überblick:
- setfacl -m (d:)u:benutzername:rwx datei — legt die Rechte für einen Benutzer fest.
- setfacl -m (d:)g:gruppenname:rwx datei — legt die Rechte für eine Gruppe fest.
Wenn “d:” für einen Ordner angegeben wird wird die angegeben ACL an neue Objekte in dem Ordner vererbt. rwx sind die Standard-Unix-Rechte. Die Rechte, die nicht gegeben werden sollen werden durch ein “-” ersetzt.
Der Befehl getfacl zeigt die gesetzten Rechte an.
Tags: Linux, Sicherheit, Web