Gdy już się dorobi systemu Active Directory wygodnie jest wykorzystać jego bazę użytkowników do autoryzacji w różnych miejscach, np. do pewnych “tajnych i tajniejszych” stron w Apache. Najprościej można to zrobić z wykorzystaniem LDAP.

Warto sprawdzić czy i jak możemy dostać się do kontrolerów. Gdy już mamy wszystkie potrzebne parametry konfigurujemy Apachego - na początek aktywujemy moduły:

a2enmod ldap
a2enmod authnz_ldap

Teraz możemy edytujemy globalny plik konfiguracyjny mod_ldap’a by ustawić nieco cache’y (bardzo przydatne). Wartości można dostosować do potrzeb ale przykładowe powinny wystarczyć na początku:

LDAPSharedCacheSize 500000
LDAPCacheEntries 1024
LDAPCacheTTL 600
LDAPOpCacheEntries 1024
LDAPOpCacheTTL 600
<Location /ldap-status>
  SetHandler ldap-status
  Order deny,allow
  Deny from all
  # Allow from 127.0.0.1 ::1
  Allow from 192.168.1.15/32
  Satisfy all
</Location>

Warto zwrócić uwagę na drugą część - można aktywować podgląd statusu mod_ldap’a co bywa przydatne na etapie testów (np. by zobaczyć kto aktualnie jest zalogowany) - ja umożliwiłem dostęp ze swojego zdalnego komputera. Teraz restart Apachego aby wszystko się załadowało:

invoke-rc.d apache2 restart

Środowisko mamy gotowe, możemy skonfigurować vhosta. Poniższe opcje wrzucamy np. do klauzuli <Directory> lub <Location>:

Authtype basic
Authname "Zaloguj sie kontem domenowym"
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthUserFile /dev/null
AuthLDAPUrl "ldap://server1.nazwadomeny.local:389 10.0.0.32:389/DC=nazwadomeny,DC=local?sAMAccountName?sub?(objectClass=person)" NONE
AuthLDAPBindDN "CN=kontodomenowe,OU=System Accounts,DC=nazwadomeny,DC=local"
AuthLDAPBindPassword "haslo konta domenowego"
Require valid-user
# Require ldap-dn ou=Jakies przykladowe OU

Najważniejsze parametry to:

  • AuthLDAPUrlexternal link - tutaj podajemy parametry do połączenia LDAP, w pierwszej części możemy podać kilka serwerów by mieć backup, później korzeń od którego będzie rozpoczynane przeszukiwanie drzewa (tutaj cała domena), na końcu filtry,
  • AuthLDAPBindDN - konto którym autoryzujemy się do kontrolera by móc przeszukiwać na nim obiekty (podane jako ścieżka LDAP),
  • AuthLDAPBindPassword - hasło do powyższego konta,
  • Require ldap-dnexternal link - można nie tylko sprawdzać czy użytkownik jest prawidłowy ale również czy jest w pewnym OU, grupie itd…

Teoretycznie wszystko jest poprawnie ale za cholerę nie chciało działać dopiero dodanie do /etc/ldap/ldap.conf opcji: REFERRALS off sprawiło że autoryzacja działa poprawnie - oneliner by to uzyskać:

echo "REFERRALS off" >> /etc/ldap/ldap.conf

Ja mam Apachego 2.2 i jest to jedyna opcja by uzyskać ten efekt. W wersji od 2.4 jest dodatkowa opcja LDAPReferralsexternal link , która pozwala na zmianę tego zachowania wprost z konfiguracji Apachego.