← Все статьи
LDAP-аутентификация: OpenLDAP и SSSD
Зачем LDAP
LDAP (Lightweight Directory Access Protocol) — это протокол для доступа к распределенным справочникам. В корпоративной среде LDAP централизует управление пользователями, группами и правами доступа. Вместо отдельных /etc/passwd на каждом сервере — единый справочник.
Установка OpenLDAP
# Ubuntu/Debian
sudo apt install slapd ldap-utils
# При установке задайте:
# - пароль администратора
# - домен (dc=example,dc=com)
# - базовая настройка
# Переустановка (если нужна чистая конфигурация)
sudo dpkg-reconfigure slapd
Структура дерева
# Пример структуры LDIF
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: Example Corp
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
dn: uid=ivanov,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: ivanov
sn: Ivanov
cn: Ivan Ivanov
uidNumber: 10001
gidNumber: 10000
homeDirectory: /home/ivanov
loginShell: /bin/bash
Добавление пользователей
# LDIF файл для пользователя
cat > user.ldif <<EOF
dn: uid=petrov,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: petrov
sn: Petrov
cn: Petr Petrov
uidNumber: 10002
gidNumber: 10000
homeDirectory: /home/petrov
loginShell: /bin/bash
userPassword: {SSHA}hashed_password_here
EOF
# Загрузка в LDAP
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f user.ldif
# Генерация хеша пароля
slappasswd -s mypassword
Настройка SSSD на клиенте
# Установка
sudo apt install sssd sssd-ldap oddjob-mkhomedir
# Конфигурация /etc/sssd/sssd.conf
[sssd]
domains = example.com
services = nss, pam
[domain/example.com]
id_provider = ldap
auth_provider = ldap
access_provider = ldap
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_default_bind_dn = cn=readonly,dc=example,dc=com
ldap_default_authtok = readonly_password
ldap_tls_reqcert = demand
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
cache_credentials = True
ldap_id_use_start_tls = True
enumerate = False
# Группы
ldap_group_search_base = ou=Groups,dc=example,dc=com
ldap_group_object_class = posixGroup
[access_provider]
ldap_access_order = filter
ldap_access_filter = (|(memberOf=cn=admins,ou=Groups,dc=example,dc=com))
Настройка NSS
# /etc/nsswitch.conf
passwd: files sss
group: files sss
shadow: files sss
netgroup: files sss
automount: files sss
# Запуск
sudo systemctl enable sssd
sudo systemctl start sssd
# Проверка
id ivanov
getent passwd ivanov
getent group admins
SSSD кэширует учётные данные локально. Если LDAP-сервер недоступен, пользователи смогут входить с использованием кэшированных данных (при правильной настройке).
Тестирование
# Поиск пользователя в LDAP
ldapsearch -x -b "dc=example,dc=com" "(uid=ivanov)"
# Поиск по группе
ldapsearch -x -b "ou=Groups,dc=example,dc=com" "(cn=admins)"
# Аутентификация
ldapsearch -x -D "uid=ivanov,ou=People,dc=example,dc=com" -W
# Проверка SSSD
sss_cache -E # сброс кэша
sssctl domain-status example.com
Безопасность
- Используйте LDAPS (порт 636) вместо LDAP (порт 389)
- Создайте отдельную bind account для только чтения
- Ограничьте доступ к LDAP через ACL
- Включите
ldap_tls_reqcert = demandна клиентах
ACL для ограничения доступа
# /etc/ldap/slapd.d/cn=config/olcDatabase={1}mdb.ldif
olcAccess: to attrs=userPassword
by self write
by anonymous auth
by dn="cn=readonly,dc=example,dc=com" read
by * none
olcAccess: to *
by dn="cn=admin,dc=example,dc=com" write
by dn="cn=readonly,dc=example,dc=com" read
by self write
by * none
Вывод
LDAP + SSSD — это проверенное решение для централизованного управления пользователями в Linux. Настройка занимает время, но окупается единым справочником для сотен серверов. Начните с OpenLDAP для тестирования, затем масштабируйте на production.