Apache-Authentisierung: PAM und htpasswd gemischt

Fol­gen­de (si­cher nicht un­ty­pi­sche) Auf­ga­ben­stel­lung pur­zel­te bei mir die Tage über den Schreib­tisch: Auf dem Team-Web­ser­ver soll web­dav ein­ge­rich­tet wer­den, um mit Pro­jekt­part­nern Da­tei­en aus­tau­schen zu kön­nen. Die Team­mit­glie­der (wel­che alle auch einen Shel­lac­count haben) sol­len voll­stän­di­gen Zu­griff haben und sich auch mit ihrem nor­ma­len User­na­me und Pass­wort an­mel­den kön­nen. Die Pro­jekt­part­ner sol­len nur auf ein­zel­ne Ver­zeich­nis­se zu­grei­fen kön­nen; na­tür­lich haben sie auch kei­nen Unix-Ac­count.

Ich habe das ganze mit Hilfe von mod-auth-ex­ter­nal und pwauth zu­sam­men­kon­fi­gu­riert.

mod-auth-ex­ter­nal er­laubt es, Name und Pass­wort an ein ex­ter­nes Pro­gramm zur Au­then­ti­sie­rung wei­ter­zu­lei­ten. pwauth prüft Name und Pass­wort gegen die PAM-Mo­du­le (kann somit also neben der Unix-Shadow-Da­tei bei­spiels­wei­se auch gegen SMB oder LDAP prü­fen). Vor­aus­set­zung ist, daß http-Ba­sic-Au­then­ti­ca­ti­on ver­wen­det wird - da nun das Pass­wort im Qua­si-Klar­text über­tra­gen wird, soll­te man die­sen An­satz nur über https ver­wen­den :-)
Der zwei­te Fall­strick war das Login der Pro­jekt­part­ner; da ich keine se­pa­ra­ten Unix-Ac­counts hier­für an­le­gen woll­te, habe ich sie in eine ht­passwd-Da­tei ge­schrie­ben. Die An­ga­be Au­th­Ba­sic­Pro­vi­der er­laubt glück­li­cher­wei­se ver­schie­de­ne Au­then­ti­sie­rungs­me­tho­den, wel­che der Reihe nach ge­tes­tet wer­den. Neben Aut­hU­ser­File für die Log­ins der Ex­ter­nen kommt auch Au­th­Group­F­i­le zum Ein­satz, um die ein­zel­nen Ac­counts be­stimm­ten Grup­pen zu­zu­ord­nen. Zum einen wer­den so die ver­schie­de­nen Pro­jek­te ge­trennt, zum an­de­ren wer­den hier auch die Shell-Ac­counts Grup­pen zu­ge­ord­net (so kann man be­stim­men, wel­che Shell-Log­ins auch hier funk­tio­nie­ren).

Zu guter Letzt sah die Kon­fi­gu­ra­ti­on (für Apa­che 2.2) dann fol­gen­der­ma­ßen aus:

<Vir­tual­Host *:443>
  # SSL stuff, etc.
  De­fine­Ex­ter­nal­Auth pwauth pipe /usr/sbin/pwauth
  <Di­rec­to­ry /var/www/ja­va­team/web­dav>
   Dav on
   Au­th­Ty­pe basic
   Auth­Na­me web­dav
   Au­th­Ba­sic­Pro­vi­der file ex­ter­nal
   Au­thEx­ter­nal pwauth
   Aut­hU­ser­File /var/www/webdav.​passwd
   Au­th­Group­F­i­le /var/www/webdav.​group
   Re­qui­re va­lid-user
   Re­qui­re group admin
  </Di­rec­to­ry>
  <Di­rec­to­ry /var/www/ht­docs/web­dav/pro­jek­t1>
   Re­qui­re va­lid-user
   Re­qui­re group admin pro­jek­t1
  </Di­rec­to­ry>
  <Di­rec­to­ry /var/www/ht­docs/web­dav/pro­jek­t2>
   Re­qui­re va­lid-user
   Re­qui­re group admin pro­jek­t2
  </Di­rec­to­ry>
</Vir­tual­Host>

Die Datei webdav.​group hat das fol­gen­de For­mat:

admin: mit­ar­bei­ter1 mit­ar­bei­ter2 mit­ar­bei­ter3
pro­jek­t1: part­ner1 part­ner2
pro­jek­t2: part­ner3

Die User mit­ar­bei­ter1 bis mit­ar­bei­ter3 sind Log­in­na­men aus dem Sys­tem; die Pass­wör­ter von part­ner1 bis part­ner3 ste­hen in webdav.​passwd, wel­che mit dem Kom­man­do­zei­len­tool ht­passwd ge­pflegt wird.