Ако трябва да правим удостоверяване към Apache сървър работещ под линукс в Windows базирана мрежа използването на вече съществуващите акаунти на потребителите в активната директория на Windows сървъра ще улесни потребителите ни и няма да се налага да ги караме да помнят по две или повече потребителски имена и пароли. Тук ще опиша как може да стане това.
Конфигурациите по-долу са тествани на Ubuntu 5.10 Breezy Badger и Fedora Core release 6 (Zod). Ползвана е инсталация на Microsoft Windows Server 2003 Enterprise Edition Service Pack 1 с инсталиран Microsoft Exchange Server 2003 Service Pack 2. Командите и конфигурациите важат за Ubuntu 5.10 Breezy Badger, но не би трябвало да има проблем да се пригодят и за други дистрибуции.
ToDo: Да се тества дали конфигурациите работят към Windows 2000 Server.
Вариант I - ползване на mod_auth_ldap
Инсталираме си apache и openldap, ако нямаме вече инсталирани:
apt-get install apache2 libldap2
За да позволим удостоверяване, във файла ‘/etc/apache2/sites-enabled/000-default’ трябва да променим реда ‘AllowOverride None’ на ‘AllowOverride AuthConfig None’.
Активираме mod_auth_ldap в конфигурацията на apache:
cd /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/auth_ldap.load
Създаваме директория, за която ще искаме удостоверяване:
mkdir /var/www/ldap_test
и я описваме в конфигурацията на apache:
touch /etc/apache2/conf.d/ldap_test
Файлът ‘/etc/apache2/conf.d/ldap_test’ трябва да съдържа следното:
<Directory /var/www/ldap_test>
AuthType Basic
AuthName “LDAP”
AuthLDAPURL ldap://ldap.domain.com:3268/DC=domain,DC=com?samAccountName?sub?(objectClass=*)
AuthLDAPBindDN DOMAIN\username
AuthLDAPBindPassword password
Require valid-user
</Directory>
Директивата ‘AuthLDAPURL’ ни дава адреса на ‘LDAP’ сървъра, като съответно трябва да замените ‘ldap.domain.com’ със хоста на Windows сървъра, а също така и ‘DC=domain’ и ‘DC=com’ със тези във вашата структура. За директивата ‘AuthLDAPBindDN’ ползвайте активен акаунт в MS Active Directory, като синтаксиса е от вида DOMAIN\username, а за директивата ‘AuthLDAPBindPassword’ - паролата на акаунта. Последните две са нужни, защото активната директория не позволява анонимни връзки. За порт ползвайте 3268 - порта на Global Catalog-а, защото при използването на стандартния LDAP порт 389 активната директория връща препратки, с които има проблеми.
След рестартиране на Apache-то:
/etc/init.d/apache2 restart
вече всичко би трябвало да работи и адреса “http://the_linux_box/ldap_test” да ни удостовери с валиден потребител към активната директория.
За да използваме удостоверяване по принадлежнаст към група, трябва да направим следните промени в конфигурацията - закоментираме или махаме директивата ‘Require valid-user’ и я заменяме със следното:
Require group cn=GroupName,cn=Users,dc=domain,dc=com
където ‘GroupName’ е името на групата, а domain и com заменяте с тези във вашата структурата.
Горното поради някаква причина не работи за потребители, за които дефинираната група е ‘Primary Group’. По подразбиране в активната директория ‘Primary Group’ е ‘Domain Users’. Също така то не работи и ако потребителят не е член директно на групата (например член е на група, която от своя страна е член на дефинираната група).
ToDo: Да се провери за възможност горните проблеми да се преодолеят.
Ако искаме да удостоверяваме към група Administrators синтаксисът е по-различен, тъй като тя се намира в Builtin структурата на активната директория:
Require group CN=Administrators,CN=Builtin,DC=domain,DC=com
Вариант II - ползване на mod_auth_pam
Инсталираме libapache2-mod-auth-pam и libpam-ldap, ако нямаме вече инсталирани:
apt-get install libapache2-mod-auth-pam libpam-ldap libnss-ldap
Създаваме директория, за която ще искаме удостоверяване:
mkdir /var/www/pam_test
и я описваме в конфигурацията на apache:
touch /etc/apache2/conf.d/pam_test
Файлът ‘/etc/apache2/conf.d/pam_test’ трябва да съдържа следното:
<Directory /var/www/pam_test>
AuthPAM_Enabled on
AuthType Basic
AuthName “PAM”
Require valid-user
</Directory>
Във файла ‘/etc/pam.d/apache2′ закоментираме всичко и добавяме следните два реда:
auth required pam_ldap.so
account required pam_permit.so
Във файла ‘/etc/pam_ldap.conf’ закоментираме всичко и добавяме следните редове:
host ldap.domain.com
base dc=domain,dc=com
binddn username@domain.com
bindpw password
port 3268
scope sub
pam_filter objectclass=*
pam_login_attribute sAMAccountName
Конфигурацията е аналогична с варианта с mod_auth_ldap. ‘host’ трябва да сочи към Windows хоста, ‘binddn’ и ‘bindpw’ съдържат активни потребителско име и парола от активната директория, като потребителското име е от вида ‘username@domain.com’. За порт пак ползваме порта на Global Catalog-а.
След рестартиране на Apache-то:
/etc/init.d/apache2 restart
вече всичко би трябвало да работи и адреса “http://the_linux_box/pam_test” да ни удостовери с валиден потребител към активната директория.
ToDo: Да се провери за възможност да се имплементира аутентикация по принадлежност към група.
Вариант III - ползване на mod_auth_kerb
За да ползваме удостоверяване чрез Kerberos първо трябва да направим няколко неща на Windows сървъра.
Първото нещо е да добавим хоста на Apache сървъра към DNS-а на Windows сървъра. Трябва да създадем A-запис за линукс машината, например ubuntu.domain.com, който да сочи към IP адреса на Apache сървъра. След това трябва да създадем т.н. kerberos ticket, с който ще извършваме аутентикацията. Командата, която трябва да изпълним в Windows от команден ред е следната:
ktpass -princ HTTP/ubuntu.domain.com@DOMAIN.COM -mapuser DOMAIN\username -crypto DES-CBC-MD5 -ptype KRB5_NT_PRINCIPAL -mapop set +desonly -pass password -out C:\keytab
Съответно заменяме ‘ubuntu.domain.com’ и ‘DOMAIN.COM’ с тези в нашата структура, а за ‘DOMAIN\username’ и ‘password’ използваме активен потребител от активната директория. След това трябва да копираме файла keytab някъде на линукс машината, например в ‘/etc/apache2/auth’ и да рестриктираме правата върху него, така че само Apache сървъра да има достъп:
chown www-data.www-data /etc/apache2/auth/keytab
chmod 400 /etc/apache2/auth/keytab
На Apache сървъра инсталираме mod-auth-kerb и krb5-config, ако вече нямаме инсталирани:
apt-get install libapache2-mod-auth-kerb krb5-config
Файлът ‘/etc/krb5.conf’ трябва да съдържа следното:
[libdefaults]
default_realm = DOMAIN.COM
[realms]
DOMAIN.COM = {
admin_server = kdc.domain.com
kdc = kdc.domain.com
}
Като трябва да замените ‘DOMAIN.COM’ с името на домейна във вашата структура, а вместо ‘kdc.domain.com’ да сложите хоста на Windows сървъра.
Създаваме директория, за която ще искаме удостоверяване:
mkdir /var/www/krb_test
и я описваме в конфигурацията на apache:
touch /etc/apache2/conf.d/krb_test
Файлът ‘/etc/apache2/conf.d/krb_test’ трябва да съдържа следното:
<Directory /var/www/krb_test>
AuthType Kerberos
AuthName “KERBEROS”
KrbServiceName HTTP
KrbMethodNegotiate On
KrbMethodK5Passwd On
KrbAuthRealms DOMAIN.COM
Krb5KeyTab /etc/apache2/auth/keytab
require valid-user
</Directory>
като съответно заменяме ‘DOMAIN.COM’ с нашия домейн.
След рестартиране на Apache-то:
/etc/init.d/apache2 restart
вече всичко би трябвало да работи и адреса “http://the_linux_box/krb_test” да ни удостовери с валиден потребител към активната директория.
ToDo: Да се провери за възможност да се имплементира аутентикация по принадлежност към група.
Вариант IV - ползване на mod_auth_imap
Това не е точно удостоверяване към активната директория, защото се прави удостоверяване към IMAP сървъра на Windows-а, но може да свърши работа, ако имаме инсталиран Microsoft Exchange Server и потребителите, които удостоверяваме имат активни пощенски кутии на Exchange-а. Тук удостоверяването става по следния начин - потребителите подават към Apache-то потребителско име и парола, а Apache-то от своя страна пробва да се свърже с тях към IMAP сървъра. Ако IMAP сървъра удостовери потребителя, то и Apache-то от своя страна го удостоверява.
На Apache-то ще ползваме mod_auth_imap и тъй като единствената дистрибуция, който има пакет за него е Mandriva 2007 ще го свалим и компилираме от официалната му станица, но първо за да го компилираме ще ни трябва dev пакета на Apache сървъра:
apt-get install apache2-threaded-dev
след това ще компилираме и инсталираме mod_auth_imap:
cd /tmp
wget http://ben.brillat.net/files/projects/mod_auth_imap2/mod_auth_imap2-current.tar.gz
tar xzf mod_auth_imap2-current.tar.gz
cd mod_auth_imap2-x.x.x
apxs2 -i -a -c mod_auth_imap.c
Създаваме директория, за която ще искаме удостоверяване:
mkdir /var/www/imap_test
и я описваме в конфигурацията на apache:
touch /etc/apache2/conf.d/imap_test
Файлът ‘/etc/apache2/conf.d/imap_test’ трябва да съдържа следното:
<Directory /var/www/imap_test>
Auth_IMAP_Enabled on
AuthName “IMAP”
AuthType Basic
Require valid-user
Auth_IMAP_Authoritative on
Auth_IMAP_Server imap.domain.com
Auth_IMAP_Port 143
Auth_IMAP_Log on
</Directory>
като за ‘imap.domain.com’ слагаме IMAP сървъра, а в ‘Auth_IMAP_Port’ - IMAP порта.
След рестартиране на Apache-то:
/etc/init.d/apache2 restart
вече всичко би трябвало да работи и адреса “http://the_linux_box/imap_test” да ни удостовери с валиден потребител към активната директория.
Ако ползвате mod-auth-pam и mod_auth_imap едновременно, добавете реда ‘AuthPAM_Enabled off’ в конфигурацията за директорията, за да забраните pam аутентикацията за тази директория, защото в противен случай ако pam модула се зарежда преди imap модула, то Apache-то винаги ще ползва удостоверяване чрез pam.
Тук няма вариант за имплементиране на удостоверяване по принадлежност към група.
ToDo: Всички конфигуррации позволяват единствено ползване на потребителско име от вида ‘username’, но не и от вида ‘DOMAIN\username’ или ‘username@domain.com’. Да се провери за възможност това да се имплементира.