Apache-Authentisierung: PAM und htpasswd gemischt

Folgende (sicher nicht untypische) Aufgabenstellung purzelte bei mir die Tage über den Schreibtisch: Auf dem Team-Webserver soll webdav eingerichtet werden, um mit Projektpartnern Dateien austauschen zu können. Die Teammitglieder (welche alle auch einen Shellaccount haben) sollen vollständigen Zugriff haben und sich auch mit ihrem normalen Username und Passwort anmelden können. Die Projektpartner sollen nur auf einzelne Verzeichnisse zugreifen können; natürlich haben sie auch keinen Unix-Account.

Ich habe das ganze mit Hilfe von mod-auth-external und pwauth zusammenkonfiguriert.

mod-auth-external erlaubt es, Name und Passwort an ein externes Programm zur Authentisierung weiterzuleiten. pwauth prüft Name und Passwort gegen die PAM-Module (kann somit also neben der Unix-Shadow-Datei beispielsweise auch gegen SMB oder LDAP prüfen). Voraussetzung ist, daß http-Basic-Authentication verwendet wird - da nun das Passwort im Quasi-Klartext übertragen wird, sollte man diesen Ansatz nur über https verwenden :-)
Der zweite Fallstrick war das Login der Projektpartner; da ich keine separaten Unix-Accounts hierfür anlegen wollte, habe ich sie in eine htpasswd-Datei geschrieben. Die Angabe AuthBasicProvider erlaubt glücklicherweise verschiedene Authentisierungsmethoden, welche der Reihe nach getestet werden. Neben AuthUserFile für die Logins der Externen kommt auch AuthGroupFile zum Einsatz, um die einzelnen Accounts bestimmten Gruppen zuzuordnen. Zum einen werden so die verschiedenen Projekte getrennt, zum anderen werden hier auch die Shell-Accounts Gruppen zugeordnet (so kann man bestimmen, welche Shell-Logins auch hier funktionieren).

Zu guter Letzt sah die Konfiguration (für Apache 2.2) dann folgendermaßen aus:

<VirtualHost *:443>
  # SSL stuff, etc.
  DefineExternalAuth pwauth pipe /usr/sbin/pwauth
  <Directory /var/www/javateam/webdav>
   Dav on
   AuthType basic
   AuthName webdav
   AuthBasicProvider file external
   AuthExternal pwauth
   AuthUserFile /var/www/webdav.passwd
   AuthGroupFile /var/www/webdav.group
   Require valid-user
   Require group admin
  </Directory>
  <Directory /var/www/htdocs/webdav/projekt1>
   Require valid-user
   Require group admin projekt1
  </Directory>
  <Directory /var/www/htdocs/webdav/projekt2>
   Require valid-user
   Require group admin projekt2
  </Directory>
</VirtualHost>

Die Datei webdav.group hat das folgende Format:

admin: mitarbeiter1 mitarbeiter2 mitarbeiter3
projekt1: partner1 partner2
projekt2: partner3

Die User mitarbeiter1 bis mitarbeiter3 sind Loginnamen aus dem System; die Passwörter von partner1 bis partner3 stehen in webdav.passwd, welche mit dem Kommandozeilentool htpasswd gepflegt wird.