Apache: Zugriffskontrolle

Die Standard-Zugriffsregel "Alle WWW-Dokumente sind von überall und durch jedermann lesbar" kann von einem WWW-Autor eingeschränkt werden:
  1. Nur bestimmte Rechner gestatten
  2. Nur nach Angabe eines Namens und Passworts
  3. Kombination aus 1. und 2.
Hinweis: Die gegenwärtig zur Verfügung stehenden Sicherheitsmechanismen sind nur als geringer Schutz anzusehen. Sollen vertrauliche Daten übertragen werden, oder ist ein Paßwortschutz gewünscht, sollte "Secure HTTP" zum Einsatz kommen. Sehr sensible Daten sollten entweder gar nicht via WWW bereitgestellt oder anderweitig geeignet verschlüselt werden!

Neben dem Zugriffskontrolle via WWW muß auch an den Zugriffsschutz über das Filesystem gedacht werden. Da die WWW-Daten im AFS liegen sind die Rechte wie folgt zu setzen (diese Rechte gelten dann für alle Dateien im Verzeichnis):

Lesen für alle Lesen nur für WWW-Server
Kontrollieren
mit:   fs la .
system:anyuser rl
user rlidwka
www-server rl
user rlidwka
Einstellen mit fs sa . system:anyuser rl fs sa . system:anyuser none
fs sa . www-server rl
Damit der WWW-Server selbst Zugriff auf die Daten hat, muß die AFS-Gruppe www-server immer Read- und List-Rechte haben.
Der WWW-Zugriffschutz erfolgt im Normalfall verzeichnisweise (d.h. auf alle Files in einem Verzeichnis). Man kann aber auch nur einzelne Files schützen - siehe Beispiel. Zur Formulierung der Zugriffsrechte dient wieder das File .htaccess, was auch auf evtl. Unterverzeichnisse wirkt.
Zugriff nur von bestimmten Rechnern:
order deny,allow
deny from all | host ...
allow from all | host ...
order legt die Reihenfolge der Auswertung der folgenden Anweisungen fest. deny dient zum Verweigern des Zugriffs, allow zum Erlauben. all meint alle Rechner der Welt, als host ist angebbar: vollständiger Rechnername, teilweiser Domainname (.domain.name), vollständige oder teilweise IP-Adresse. Man kann auch mehrere angeben - durch Leerzeichen trennen. Die Angabe von Mustern (mit *) ist nicht möglich.
Standard: allow from all
Beispiel:
Files im Verzeichnis dir20 sollen nur von Rechnern der Informatik und des Rechenzentrums der TU zugreifbar sein: .htaccess File im Verzeichnis dir20 enthält:
order deny,allow
deny from all
allow from .informatik.tu-chemnitz.de .hrz.tu-chemnitz.de

Ergebnis: .../dir20/

Zugriff mit Abfrage von Nutzer + Passwort:
Hier ist zu beachten, daß bei normalen Zugriffen via http das Paßwort unverschlüsselt übertragen wird. Für manche Anwendungen mag das akzeptabel sein, für viele ist es sicher bedenklich. Hier sollte https zum Einsatz kommen, wodurch die Daten verschlüsselt übertragen werden.

AuthName auth-name
AuthType Basic
AuthUserFile vollst. Filename
AuthGroupFile vollst. Filename
require user | group name ...
require valid-user
Als AuthName wird ein Name verwendet, der dem Nutzer bei der Abfrage von Namen + Passwort angezeigt wird. Z.Z. wird als AuthType nur Basic unterstützt (Name + Passwort werden unverschlüsselt übertragen). Hinter AuthUserFile wird ein vollständiger Filename angegeben, der die Namen und Passwörter enthält in der Form:
    Name:verschlüsseltes-Passwort
    ...
Zur Verwaltung solcher Files gibt es das Unix-Kommando htpasswd:
htpasswd pw-filename www-name
Im File pw-filename wird ein Eintrag für den Namen www-name hinzugefügt oder, wenn er bereits existiert, geändert. Das Passwort wird abgefragt.
Zum Anlegen eines neuen Files muß verwendet werden:
htpasswd -c pw-filename www-name

NEU! Will man die URZ-Nutzerkennzeichen + Passwörter zur Steuerung des Zugriffs verwenden, so ist anzugeben:
AuthDBMUserFile /afs/tu-chemnitz.de/www/server/apache/etc/urzpasswd.dbm
Die alte Angabe bitte nicht mehr verwenden:
AuthUserFile /afs/tu-chemnitz.de/www/server/apache/etc/urzpasswd
Da es sich hierbei um das NIS-Paßwort handelt, sollte hierfür https zum Einsatz kommen, wodurch die Daten verschlüsselt übertragen werden.

In einem AuthGroupFile können Gruppen von Namen vereinbart werden:

    Gruppe: name1 name2 name3 ...
Achtung: Auf diese Files sollte kein Zugriff über den WWW-Server möglich sein. Sie sollten also nicht unter public_html liegen! Allerdings muß das File für den WWW-Server lesbar sein, s.o. AFS-Rechte.

Mit require gibt man schließlich an, welchen Namen (require user name ... - aus dem AuthUserFile) bzw. Gruppen (require group name ... - aus dem AuthGroupFile) der Zugriff erlaubt wird. Man kann mehrere Namen oder Gruppen angeben, durch Leerzeichen trennen. Mit require valid-user erlaube ich allen in AuthUserFile/AuthGroupFile eingetragenen Nutzern den Zugriff.

Beispiel:
Files im Verzeichnis dir21 sollen nur von Nutzern zugreifbar sein, die ein Geheimnis kennen, nämlich den Namen Rum und das Passwort topf: .htaccess File im Verzeichnis dir21 enthält:
AuthName "Geistvolles Getränk"
AuthType Basic
AuthUserFile /home/fri/test/hickpasswd
require user Rum

Das Passwort-File wurde angelegt mit:
%unix-shell> htpasswd -c /home/fri/test/hickpasswd Rum Adding password for Rum.
New password: topf
Re-type new password: topf
Password for Rum changed.
Ergebnis: .../dir21/
Kombination aus 1. + 2.:
Beide Bedingungen müssen stimmen:
Beispiel:
Files im Verzeichnis dir22 sollen nur von authentifizierten URZ-Nutzern (Nutzerkennzeichen + Passwort) von Rechnern aus Deutschland und Österreich zugreifbar sein: .htaccess File im Verzeichnis dir22 enthält:
AuthName URZ
AuthType Basic
AuthDBMUserFile /afs/tu-chemnitz.de/www/server/apache/etc/urzpasswd.dbm
AuthGroupFile /dev/null
require valid-user

order deny,allow
deny from all
allow from .de .at

Ergebnis: .../dir22/

Eine von 2 Bedingungen muß stimmen:
Beispiel:
Files im Verzeichnis dir23 sollen Nutzern auf URZ-Rechnern sofort zugreifbar sein. Nutzer anderer Rechner müssen sich als URZ-Nutzern authentifizieren (Nutzerkennzeichen + Passwort). .htaccess File im Verzeichnis dir23 enthält:
Satisfy any ...
Ergebnis: .../dir23/
Schutz einzelner Dateien:
<Files filename>
...
</Files>

Hiermit kann man eine einzelne Datei schützen - für ... stehen beliebige Anweisungen aus 1. - 3. (s.o.). Mit * und ? sind auch einfache Muster möglich, z.B. *.html - alle HTML-Files.
<Files ~ "regulärer Ausdruck">
...
</Files>

Hiermit kann man die betreffenden Dateien über komplexe reguläre Ausdrücke festlegen, z.B. ".+\.(html|htm)$" - alle Dateien, die auf .html oder .htm enden.
Beispiel:
Die Files im Verzeichnis dir24 sollen folgendermaßen zugreifbar sein:
index.html - öffentlich
intern.html - nur TU Chemnitz
text.gif (und weitere Bilder) - nur für URZ-Nutzer
.htaccess File im Verzeichnis dir24 enthält:
<Files intern.html>
... gilt nur für das File intern.html
</Files>

<Files ~ ".+\.(jpg|gif)$">
... ist ein regulärer Ausdruck: gilt für alle Files mit .gif und .jpg am Ende
</Files>
Ergebnis:
index.html, intern.html, text.gif

Weitere Informationen: Apache Dokumentation


Frank Richter,