Zu Hauptinhalt springen
Gewählte Sprache ist Deutsch Select language
Startseite UR

Dateizugriffsrechte u. FACLs

File Access Control Lists

Schreib- und Leserechte

Die Webserver der Universität arbeiten mit dem Unix-Dateisystem. Grundsätzlich gibt es in einem UNIX-Dateisystem nur Dateizugriffsrechte für "owner", "group" und "other".

Dabei läuft der Webserver unter einem eigenen User-Account in der Gruppe "www". Da es nicht sinnvoll wäre, alle Benutzer auf dem Webserver in diese Gruppe aufzunehmen, müssen alle Dateien, die vom Server lesbar sein sollen, die Rechte "******r**" haben. Solche Dateien sind dann für alle Benutzer der Universität mit einem Unix-Account lesbar.

Wenn der Server für eine Datei Schreibrechte benötigt, wird die Sache noch gefährlicher. Für die Datei müssen in diesem Fall alle Benutzer Schreibrechte haben.

Die einzige Lösung zu diesem Problem ist umständlich: Die File Access Control List erlaubt eine gezielte Zugangskontrolle zu einer Datei. Jede Datei hat eine FACL, die man mit den Kommandos getfacl und setfacl anschauen oder ändern kann.


FACLs

Das Kommando

getfacl datei
gibt die "access control list" für datei (eine Datei oder ein Verzeichnis) aus.

Auf dem Linux-Login-Server rex2 stehen das PHP-Skript setfacl.php und einige Abwandlungen davon (hide, grantserver und clearfacl) zur Verfügung. Diese Skripten erledigen die meisten Aufgeben bezüglich Schreib- und Leserechte für die Web-Farm und den CGI-Server. Sie funktionieren aber nur, wenn der Benutzer auf dem Rechner rex2 eingeloggt ist.

Setzt man eine FACL auf eine Datei, so sieht man ein zusätzliches Pluszeichen in den Dateirechten beim UNIX Kommando ls -l. Hatte die Datei nomalerweise z.B. die Rechte "-rw-r--r--", könnte "-rw-------+" mit ls -l erscheinen. Das Pluszeichen bedeutet, dass ein FACL für diese Datei aktiv ist. Will man die tatschächlichen Rechte erfahren, so benutzt man das Kommando:

getfacl datei
Als Ergebnis liefert es:

# file: tt.log
# owner: mim09509
# group: rz
user::rw-
user:788:rwx #effective:rw-
user:789:rwx #effective:rw-
group::--- #effective:---
mask:rw-
other:---

Die Benutzer 788 und 789 sind der WWW-Server (www-httpd) bzw. der MySQL-Server (mysqld) auf dem GCI-Server. Ausschlaggebend ist die Angabe "#effective:rw-", die aus "user:788:rwx" und "mask:rw-" errechnet wird: Der Server darf in dieser Datei lesen und schreiben.

Warnung: Das Kommando chmod löscht die Maske gelegentlich, was die FACL effektiv unwirksam macht. Dieses Kommano wird oft bei Samba oder beim "Secure Shell Client" automatisch ausgeführt.


Das Kommando setfacl.php

Die Skripten setfacl.php, hide, grantserver und clearfacl können benutzt werden, um FACLs zu ändern, und befinden sich im Verzeichnis /www/bin/ bzw. /www/bin/cgi/. Diese Verzeichnise werden nur an rex2 exportiert. Die Skripten funktionieren deshalb nur, wenn der Benutzer auf dem Rechner rex2 eingeloggt ist.

Das grundlegende Skript ist setfacl.php. Aufruf für Dateien auf der Web-Farm:

/www/bin/setfacl.php -optionen datei[en]
Für Dateien oder Verzeichnisse auf dem CGI-Server (rss8) benutzt man

/www/bin/cgi/setfacl.php -optionen datei[en]

Die anderen Skripten sind Varianten, die die wichtigsten Aufgaben erledigen. Sie werden zuerst beschrieben.


Dateien oder Verzeichnisse unsichtbar machen: hide

Das Kommando

/www/bin/hide [-optionen] datei[en]
bzw.

/www/bin/cgi/hide [-optionen] datei[en]
macht Dateien oder Verzeichnisse nur für den Server lesbar und für den Besitzer les- und schreibbar.
Zusätzliche Optionen (meist nicht notwendig):

  • -g Falls Gruppenrechte für diese Datei vorhanden sind, werden sie in die FACL übernommen. Diese Option ist in den meisten Fällen kontraproduktiv: Für einen Benutzer mit einem Studentenaccount z.B. (Gruppe stud) würden die Rechte "-rw-r----+" bedeuten, dass jeder andere Student die Datei anschauen könnte.
  • -r Alle angegebenen Verzeichnisse werden rekursiv geändert.
  • -s oder -w Die Leistung von grantserver wird zusätzlich durchgeführt: Die Datei soll für den Server schreibbar werden. Die genaue Wirkung wird unten beschrieben.

Das Skript hide wird verwendet, um den Inhalt bestimmter Dateien oder Verzeichnisse (z.B. Skripten, die MySQL-Passwörter enthalten) zu schützen. Es ist nicht notwendig sämtliche Dateien zu schützen. Es reicht, wenn ein übergeordnetes Verzeichnis geschützt wird: nur der Server kann diese Hierarchieebene überschreiten.


Dateien oder Verzeichnisse für den Server schreibbar machen: grantserver

Wenn ein PHP-Skript z.B. Dateien schreiben soll, kann das Kommando

/www/bin/grantserver [-optionen] datei[en]
bzw.

/www/bin/cgi/grantserver [-optionen] datei[en]
verwendet werden. Die Angabe datei[en] kann eine oder mehrere Dateien oder Verzeichnisse sein. Die Auswirkung ist bei Dateien und bei Verzeichnissen unterschiedlich.

Bei Einzeldateien werden den entsprechenden Server-Accounts Schreibrechte für die Dateien gegeben. Will man z.B. "Log"-Dateien mit der Funktion rz_errlog_log() verwenden, muss man zwei Dateien (die Log-Datei und die Lock-Datei) erzeugen und diese Dateien für den WWW-Server schreibbar machen:

touch session.log
touch session.lck
/www/bin/cgi/grantserver session.l*
getfacl session.log

Das Ergebnis des getfacl-Kommandos ist

# file: session.log
# owner: www
# group: www
user::rw-
user:788:rw- #effective:rw-
user:789:rw- #effective:rw-
group::r-- #effective:r--
mask:rw-
other:r--

Das heißt: Der WWW- und der MySQL-Server dürfen in diese Datei schreiben.

Wenn ein Verzeichnis für den Server schreibbar ist, kann er auch neue Dateien erzeugen, die dann dem Server-Benutzer www-httpd (788) gehören. Wenn keine anderen Vorkehrungen getroffen werden, kann eine solche Datei nur vom Server gelöscht oder geändert werden. Der Besitzer des Verzeichnisses kann sie nicht löschen. Um dieses Problem zu vermeiden, werden sog. "default-users" in die FACL eingetragen:

# file: test/
# owner: mim09509
# group: rz
user::rwx
user:788:rwx #effective:rwx
user:789:rwx #effective:rwx
group::r-x #effective:r-x
mask:rwx
other:r-x
default:user::rw-
default:user:788:rw-
default:user:789:rw-
default:user:mim09509:rw-
default:group::r--
default:mask:rw-
default:other:r--

Die folgenden Optionen werden bei grantserver berücksichtigt:

  • -r Alle angegebenen Verzeichnisse werden rekursiv geändert.
  • -h Die Leistung von hide wird zusätzlich durchgeführt: Die Datei (das Verzeichnis) soll dann nur für den Server und für den Besitzer les- und schreibbar sein.
  • -g Diese Option ist nur zusammen mit -h wirksam: Falls die Optionen -hg vorhanden sind, werden evtl. vorhandene Gruppenrechte für die gegebene Datei in die FACL übernommen. (Siehe auch die Beschreibung von hide).


FACLs löschen: clearfacl

Um einmal gesetzte FACLs zu löschen, benutzt man das Kommando

/www/bin/clearfacl [-optionen] datei[en]
bzw.

/www/bin/cgi/clearfacl [-optionen] datei[en]

Diese Anweisung entfernt alle FACLs und setzt die Rechte auf "-rw-r--r--" für Dateien und auf "drwxr-xr-x" für Verzeichnisse. Es gibt folgende Optionen:

-r Alle Verzeichnisse werden rekursiv geändert.
-x Alle Dateien sollen ausführbar (-rwxr-xr-x) werden.


Benutzung des Kommandos setfacl.php

Das Kommando

/www/bin/setfacl.php [-optionen] datei[en]
bzw.

/www/bin/cgi/setfacl.php [-optionen] datei[en]
vereint die Leistungen von hide, grantserver und clearfacl. Die Optionen:

  • -h Die Datei soll nur für den Server lesbar und für den Besitzer les- und schreibbar werden. Die genaue Wirkung wird unter hide beschrieben.
  • -s oder -w Die Datei soll für den Server schreibbar werden. Die genaue Wirkung wird unter grantserver beschrieben.
  • -c Evtl. vorhandene FACLs werden aus der Datei entfernt. Die genaue Wirkung wird unter clearfacl beschrieben.
  • -r Alle Verzeichnisse werden rekursiv geändert.
  • -g (nur mit -h wirksam) Falls Gruppenrechte für diese Datei vorhanden sind, werden sie in die FACL übernommen. Diese Option ist in den meisten Fällen kontraproduktiv: Für einen Benutzer mit einem Studentenaccount z.B. (Gruppe stud) würden die Rechte "-rw-r-----+" bedeuten, dass jeder andere Student die Datei anschauen kann.
  • -x (nur mit -c wirksam) Alle Dateien sollen ausführbar (-rwxr-xr-x) werden.

Dateien, Verzeichnisse und Optionen können in beliebiger Reihenfolge angegeben werden. Mehrere Optionen können zusammengefasst werden. Die Angabe "-hwr" wirkt z.B. wie "-h -w -r".

Mindestens eine der Optionen -h, -w oder -c muss vorhanden sein, wobei -c nicht gleichzeitig mit -w oder -h erscheinen darf. (Eine FACL kann nicht gleichzeitig gesetzt und entfernt werden!)

  1. Universität