от Милен Панков(15-04-2007)

рейтинг (25)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Ако трябва да правим удостоверяване към 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’. Да се провери за възможност това да се имплементира.



<< | >>