panelarrow

Сайт обо всём по-немногу

Сайт обо всём по-немногу

Аутентификация пользователей Apache в Active Directory

| 0 comments

Иногда необходимо сделать проверку пользователей из Apache в Active Directory, чтобы не заводить их руками и привязаться к существующей базе пользователей. Для этого, необходимо написать следующие директивы  конфигурации в файле

.htaccess:

AuthName «My secret area»
AuthType Basic
AuthBasicProvider ldap
AuthLDAPUrl «ldap://ad-srv.host.name:3268/DC=ad-domain,DC=ru?samAccountName?sub?(objectClass=user)» NONE
AuthzLDAPAuthoritative on
AuthLDAPBindDN «ad-user@ad-domain.lan»
AuthLDAPBindPassword SecretPassword
Require ldap-group CN=DnsAdmins,CN=Builtin,DC=ad-domain,DC=lan

В 4 строке необходимо указать вместо ad-srv.host.name имя вашего сервера с Active Directory. Обратите также внимание на номер порта — 3268, на этом порту отвечает глобальный каталог, по каким-то причинам, авторизация не работает через 389 порт (по каким именно причинам — выяснять лень). На 6 строке вместо ad-user@ad-domain.lan вам необходимо указать имя подключения (bind name) и на 7 строке заместо SecretPassword — пароль под которым будет происходить подключение. В последней строке указывается группа ldap, в которую должен входить аутентифицирующийся пользователь.

Для проверки и просмотра данных объекте в схеме LDAP, можно воспользоваться следующим perl-скриптом:

#!/usr/bin/perl -w

use Net::LDAP;
use Net::LDAP::LDIF;

$server = «ad-srv.host.name»;
$port = getservbyname («ldap»,"tcp") || «389»;
$basedn = «DC=ad-domain,DC=lan»;
$scope = «sub»;
$filter = «(&(objectClass=user) (samAccountName=AuthUserName))»;

$dn = «ad-user\@ad-domain.lan»;

$c = new Net::LDAP ($server, port => $port, version=>3) or
die «Невозможно соединиться с $server: $@\n»;
$c->bind ($dn, password => «SecretPassword»)
or die «Unable to bind: $@\n»;

$searchobj = $c->search (base => $basedn, scope => $scope, filter => $filter);
die «Неуспешный поиск, номер ошибки #».$searchobj->error () if $searchobj->code ();

#Output result
foreach $entry ($searchobj->entries) {

$entry->dump;

}
$c->unbind;

В результате выполнения скрипта, вы получите сведения об указанном объекте из Active Directory. Список групп, в которые входит объект будет указан в поле «memberOf:»

UPD. После переноса сайта на новую ОС с новой версией apache я сделал новую заметку, ибо чтобы всё работало как и раньше, надо сделать небольшие изменения.

Leave a comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *