Общие настройки slapd
описаны в статье "Общие настройки OpenLDAP".
Предполагается, что slapd
выступает кэширующим прокси между Linux компьютерами в локальной сети и внешним сервером AD, работающим под управлением Win2008R2 или старше. Задачей кэширующего сервера является обеспечение отказоустойчивости при кратковременных разрывах связи с сервером АД. Клиентом выступает Linux с сервером nslcd
. Соответствующая конфигурация nslcd
описана в отдельной статье.
Для доступа к LDAP в AD заведен пользователь Manager с паролем secret.
В поставке CentOS нет схемы LDAP из AD. Отсутствие необходимых атрибутов приводит к тому, что запросы с этими атрибутами не обрабатываются модулем pcache, причём без какой-либо диагностической информации.
Источником схемы может быть репозиторий https://github.com/dkoudela/active-directory-to-openldap + доработка схемы NIS, в которую для совместимости с AD добавлено имя атрибута 'unixHomeDirectory', причем, обязательно в первой позиции.
/etc/openldap/schema/nis.schema
attributetype ( 1.3.6.1.1.1.1.3 NAME ('unixHomeDirectory' 'homeDirectory')
DESC 'The absolute path to the home directory'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
Ещё один вариант (неполный) схемы AD в прикреплённом файле. Источник схемы.
Для проверки работоспособности кэша необходимо запустить сервер в режиме отладки slapd -d 4096
и заставить nslcd
обратиться к нему (например выполнив команду nscd -i passwd;id testuser
).
В хорошем случае при первом запросе атрибутов пользователя в логе будут строки вида :
QUERY NOT ANSWERABLE
QUERY CACHEABLE
при повторных запросах будет выдаваться
QUERY ANSWERABLE (answered 3 times)
В плохом случае постоянно будут выдаваться строки
QUERY NOT ANSWERABLE
QUERY NOT CACHEABLE
Ниже перечислены конфигурационные файлы в которые надо внести изменения.
Файл содержит опции, которые используются при запуске slapd
командой systemctl start slapd
или service slapd start
#Явно перечисляем интерфейсы по которым будет доступен прокси
SLAPD_LDAP=no
SLAPD_LDAPI=no
SLAPD_LDAPS=no
SLAPD_URLS="ldapi:/// ldap://192.168.1.1/ ldap://192.168.2.1/ ldap://127.0.0.1/"
В этом файле важен параметр TLS_REQCERT allow
. Без него невозможно подключиться к серверу АД с самоподписанным сертификатом.
#URI - адрес сервера. Протокол доступа может быть ldap: и ldaps:
URI ldaps://ldapserver.example.com/
#BASE - ветка дерева LDAP в которой ведется поиск
BASE dc=example,dc=com
#TLS_CACERTDIR - путь к каталогу с сертификатами SSL для установки защищенного соединения с сервером
TLS_CACERTDIR /etc/openldap/certs
#TLS_REQCERT - что делать если сертификат сервера не найден. 'allow' - продолжить соединение
TLS_REQCERT allow
Основной конфигурационный файл
# Схема из репозитория https://github.com/dkoudela/active-directory-to-openldap
# nis.schema с небольшой модификацией
include /etc/openldap/schema_ad/microsoftattributetype.schema
include /etc/openldap/schema_ad/microsoftattributetypestd.schema
include /etc/openldap/schema_ad/corba.schema
include /etc/openldap/schema_ad/core.schema
include /etc/openldap/schema_ad/cosine.schema
include /etc/openldap/schema_ad/duaconf.schema
include /etc/openldap/schema_ad/dyngroup.schema
include /etc/openldap/schema_ad/inetorgperson.schema
include /etc/openldap/schema_ad/java.schema
include /etc/openldap/schema_ad/misc.schema
include /etc/openldap/schema_ad/nis.schema
include /etc/openldap/schema_ad/openldap.schema
include /etc/openldap/schema_ad/ppolicy.schema
include /etc/openldap/schema_ad/collective.schema
include /etc/openldap/schema_ad/microsoftobjectclass.schema
#Источник данных
database ldap
suffix "DC=example,DC=com"
uri ldap://ldap.example.com/
rootdn "OU=People,DC=example,DC=com"
rebind-as-user yes
# От чьего имени подключаемся к АД
idassert-bind bindmethod=simple
binddn="CN=Manager,DC=example,DC=com"
credentials="secret"
mode=none
# Кто может подключаться к нам (все - анонимно и без авторизации)
idassert-authzFrom "*"
# Опциональное отображение атрибутов passwd на схему AD
# в нашем варианте оно делается на уровне nslcd
#moduleload rwm
#overlay rwm
#rwm-map attribute uid sAMAccountName
#rwm-map attribute dn distinguishedName
#rwm-map attribute homeDirectory unixHomeDirectory
#rwm-map attribute gecos displayName
# Кэширование
# Загрузка модуля и включение оверлея к базе LDAP
moduleload pcache.la
overlay pcache
# pcache <database> <max_entries> <numattrsets> <entry_limit> <cc_period>
# параметры базы:
# <database> for cached entries.
# <max_entries> when reached - cache replacement is invoked
# <numattrsets> = pcacheAttrset
# <entry_limit> limit to the number of entries returned
# <cc_period> Consistency check time to wait
# в базе в формате BerkleyDB хранится 2000 записей, один набор атрибутов/фильтров с индексом 0
pcache hdb 2000 1 1000 300
#кэшируем все атрибуты (0 - индекс)
pcacheattrset 0 *
#шаблон запроса должен в точности совпадать с указанным, иначе запрос не кэшируется
#нужные шаблоны запросов можно отследить, запустив slapd в отладочном режиме - slapd -d 4096
#ниже приведены шаблоны запросов nslcd в CentOS 7 с модификацией фильтра, описанной в http://parallel.uran.ru/node/408
#кэшируем перечисленные запросы и храним их 900 секунд (0 - индекс)
pcacheTemplate (&(&(objectClass=)(uidNumber=*)(unixHomeDirectory=*))(uidNumber=)) 0 900 120
pcacheTemplate (&(&(objectClass=)(uidNumber=*)(unixHomeDirectory=*))(sAMAccountName=)) 0 900 120
pcacheTemplate (&(objectClass=)(uidNumber=*)(unixHomeDirectory=*)) 0 900 120
pcacheTemplate (&(|(objectClass=)(objectClass=))(|(memberUid=)(member=))) 0 900 120
pcacheTemplate (&(|(objectClass=)(objectClass=))(gidNumber=)) 0 900 120
pcacheTemplate (&(|(objectClass=)(objectClass=))(memberUid=)) 0 900 120
pcacheTemplate (&(|(objectClass=)(objectClass=))(cn=)) 0 900 120
# максимальный размер запроса
sizelimit unlimited
# путь к базе
directory /var/lib/ldap
cachesize 200
# индексы для ускорения доступа
index objectClass eq,pres
index member
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
Прикрепленный файл | Размер |
---|---|
ad_schema.txt | 4.09 КБ |