Startseite UR
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.
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):
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:
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:
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!)