LINUX-BG   Адрес : http://www.linux-bg.org
Удостоверяване на потребител в Apache към Microsoft Active D
От: Милен Панков
Публикувана на: 15-04-2007
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=392214166

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


<< | >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.18 usr + 0.01 sys = 0.19 CPU)