Всё необходимое для получения имен пользователей из LDAP в CentOS 7 находится в пакете nss-pam-ldapd. Этот пакет добавляет модуль pam_ldap.so в библиотеку libpam, модуль libnss_ldap.so в библиотеку libnss и сервер nslcd (работающий в связке с кэширующим сервером nss - nscd), который и выполняет запросы к LDAP серверу.
В файле /etc/nsswitch.conf
необходимо добавить ldap, как источник данных для баз passwd
, group
и shadow
:
passwd: files ldap
shadow: files ldap
group: files ldap
В файле /etc/nslcd.conf
гнобходимо настроить сервер LDAP и набор запросов к нему. Запросы включают фильтры, которые позволяют выбрать записи относящиеся к той или иной базе, и отображения стандартных имен в базе на эквивалентные по смыслу имена, которые использует схема LDAP на сервере. В примерах есть пара рабочих вариантов настроек для доступа к серверу Active Directory (AD). Для сервера slapd
из OpenLDAP модификация запросов, скорее всего, не требуется.
# Выбираем записи имеющие атрибуты uidNumber и unixHomeDirectory
# При запросе к фильтру добавляется &(sAMAccountName=username)
#
# Не совсем понятно зачем явно отбрасываются записи для компьютеров.
# Возможно существуют сценарии с назначением компьютеру атрибута unixHomeDirectory.
filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
# Отображение полей passwd на атрибуты AD
map passwd uid sAMAccountName
map passwd homeDirectory unixHomeDirectory
map passwd gecos displayName
Сложнее с вариантом, когда для доступа к AD используется slapd
в режиме кэширующего прокси, используемого для отказоустойчивости при кратковременных обрывах связи с сервером AD. Этот прокси не кэширует запросы с фильтром, использующим операцию "НЕ", а следовательно, и запрос из предыдущего примера. Для работы через кэширующий прокси рабочим оказался упрощённый вариант фильтра:
filter passwd (&(objectClass=user)(uidNumber=*)(unixHomeDirectory=*))