NPV-AM

← Все статьи

LDAP-аутентификация: OpenLDAP и SSSD

27 фев 2026 · 11 мин чтения

Зачем 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

Безопасность

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.