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:

  1. Mehrere Benutzer sollen eine Webseite bearbeiten können
  2. Der Web-Server muss die Dateien natürlich lesen können um sie auszuliefern
  3. 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: , ,

Hinterlasse eine Antwort