Зачем нужен OpenLDAP между TrueNAS и Active Directory?
Прямая интеграция TrueNAS с Active Directory работает, но имеет ограничения. Она жестко связывает хранилище с инфраструктурой домена, передает управление атрибутами AD и может создавать конфликты безопасности. Использование OpenLDAP в качестве промежуточного звена решает эти проблемы.
Архитектура с OpenLDAP дает три ключевых преимущества:
- Изоляция и безопасность: TrueNAS не обращается напрямую к контроллерам домена. Вы настраиваете отдельный сервисный аккаунт в AD с правами только на чтение, что минимизирует риски в случае компрометации хранилища.
- Гибкость и контроль: Вы можете фильтровать синхронизируемых пользователей и группы, преобразовывать атрибуты AD в формат, оптимальный для TrueNAS, и создавать единую точку управления доступом для нескольких NAS.
- Устранение несовместимости: OpenLDAP выступает переводчиком между схемой данных Active Directory (Microsoft) и ожиданиями TrueNAS (стандартный LDAP).
Схема взаимодействия выглядит так: Active Directory - это источник истины об учетных записях. OpenLDAP в режиме синхронизации (syncrepl) периодически или в реальном времени забирает данные из AD, применяет к ним заданные правила маппинга и фильтрации. TrueNAS подключается уже к этому подготовленному OpenLDAP-каталогу как к обычному LDAP-серверу.
Подготовка инфраструктуры и предварительные требования
Перед началом работ убедитесь, что ваша среда соответствует требованиям. Пропуск этого этапа - основная причина неудач.
Требования к ПО (актуально на 2026 год):
- TrueNAS CORE 13.0-U8.1 или новее, либо TrueNAS SCALE 24.12 (Angelfish) или новее.
- OpenLDAP 2.6.7+ на отдельном сервере или виртуальной машине. Рекомендуемая ОС: Debian 12/13, Ubuntu 24.04 LTS, Rocky Linux 9/10.
- Active Directory на Windows Server 2022 или 2025.
Требования к учетным данным:
- Учетная запись в домене AD с правами на чтение атрибутов пользователей и групп в целевых подразделениях (OU). Рекомендуется создать отдельный service account (например,
svc_ldap_sync). - Административный доступ (root/sudo) к серверу, где будет развернут OpenLDAP.
- Административный доступ к веб-интерфейсу TrueNAS.
Настройка DNS и сетевого взаимодействия
Стабильное разрешение имен - фундамент всей интеграции. Выполните проверки с сервера OpenLDAP:
# Проверка разрешения имен контроллеров домена
nslookup dc01.yourdomain.local
nslookup dc02.yourdomain.local
# Обратная запись (PTR) для сервера OpenLDAP
nslookup <IP-адрес OpenLDAP-сервера>
# Проверка связи по ключевым портам
nc -zv dc01.yourdomain.local 389 # LDAP
nc -zv dc01.yourdomain.local 636 # LDAPS (если используется SSL)
Настройте firewall на сервере OpenLDAP, разрешив входящие соединения от TrueNAS на порты 389 (LDAP) и 636 (LDAPS). Если вы планируете использовать StartTLS на порту 389, убедитесь, что он также открыт.
Установка и базовая конфигурация OpenLDAP
Начнем с развертывания OpenLDAP на выбранном дистрибутиве Linux. Для примера используем Debian/Ubuntu.
# Установка необходимых пакетов
sudo apt update
sudo apt install -y slapd ldap-utils libnss-ldapd
# Во время установки slapd вас спросят о доменном имени и пароле администратора.
# Если нужно переконфигурировать позже:
sudo dpkg-reconfigure slapd
После установки проверьте работу сервиса: sudo systemctl status slapd. Сервис должен быть активен (active).
Настройте базовый DN (Distinguished Name) организации. Отредактируйте или создайте файл начальной конфигурации, например, /etc/ldap/base.ldif:
dn: dc=nas,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
o: NAS Proxy LDAP
dc: nas
# Пользователь для администрирования
# ВНИМАНИЕ: В production используйте сложный пароль!
dn: cn=admin,dc=nas,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP администратор
userPassword: {SSHA}... # Сгенерируйте хэш с помощью slappasswd
Добавьте данные в каталог: sudo ldapadd -x -D "cn=admin,dc=nas,dc=local" -W -f /etc/ldap/base.ldif.
Настройка безопасного соединения (TLS/StartTLS)
Использование незашифрованного LDAP (порт 389) недопустимо в production-среде. Настройте TLS.
1. Сертификат. Вы можете использовать самоподписанный сертификат или выпущенный внутренним/публичным CA.
# Пример генерации самоподписанного сертификата (для тестов)
sudo openssl req -new -x509 -nodes -out /etc/ssl/certs/ldap.crt -keyout /etc/ssl/private/ldap.key -days 3650 -subj "/CN=openldap.nas.local"
sudo chmod 600 /etc/ssl/private/ldap.key
2. Настройка slapd на использование TLS. В современных версиях OpenLDAP используется динамическая конфигурация (cn=config). Добавьте конфигурацию TLS:
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca-certificates.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/ldap.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/ldap.key
-
add: olcTLSVerifyClient
olcTLSVerifyClient: never # или 'allow' для взаимной аутентификации
Примените изменения: sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f tls_config.ldif.
3. Проверка. Протестируйте защищенное подключение с того же сервера:
ldapsearch -x -H ldaps://localhost:636 -b "dc=nas,dc=local" -s base -ZZ
Если используется StartTLS (шифрование на порту 389), команда будет: ldapsearch -x -H ldap://localhost:389 -b "dc=nas,dc=local" -s base -ZZ.
Настройка синхронизации OpenLDAP с Active Directory
Это ключевой этап. Мы настроим одностороннюю синхронизацию (syncrepl) так, чтобы OpenLDAP стал зеркалом нужной части AD.
1. Создайте сервисный аккаунт в AD. Создайте пользователя (например, svc_ldap_sync) в специальном OU. Дайте ему права «Чтение» на все атрибуты в тех OU, откуда нужно синхронизировать пользователей и группы. Учетная запись не должна иметь права на вход в систему.
2. Настройте модуль syncprov. Он необходим для работы syncrepl. Убедитесь, что модуль загружен: sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config '(&(objectClass=olcModuleList)(olcModuleLoad=syncprov.la))'. Если нет, загрузите его.
3. Создайте конфигурационный файл синхронизации. Пример файла /etc/ldap/sync_ad.ldif:
# Загрузка модуля syncprov (если не загружен)
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
# Включение syncprov для базы данных
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpSessionLog: 100
# Конфигурация базы данных для синхронизации с AD
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncrepl
olcSyncrepl: rid=001
provider=ldaps://dc01.yourdomain.local:636
bindmethod=simple
binddn="CN=svc_ldap_sync,OU=Service Accounts,DC=yourdomain,DC=local"
credentials="StrongPassword123"
searchbase="DC=yourdomain,DC=local"
scope=sub
schemachecking=off
type=refreshAndPersist
retry="5 5 300 5"
attrs="*,+"
exclude="objectClass=secret"
tls_reqcert=demand
-
add: olcUpdateRef
olcUpdateRef: ldaps://dc01.yourdomain.local:636
Внимание! Замените provider, binddn, credentials, searchbase на свои значения. Для работы по LDAPS убедитесь, что корневой сертификат вашего AD CA доверен на сервере OpenLDAP.
Маппинг атрибутов AD в LDAP-схему для TrueNAS
По умолчанию атрибуты AD не полностью соответствуют ожиданиям TrueNAS. Используйте модуль rwm (rewrite/remap) для преобразования. Создайте файл /etc/ldap/rwm_mapping.ldif:
# Загрузка модуля rwm
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: rwm
# Правила преобразования атрибутов
dn: olcOverlay=rwm,olcDatabase={1}mdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcRwmConfig
olcOverlay: rwm
olcRwmMap: objectClass posixAccount user
olcRwmMap: objectClass posixGroup group
olcRwmMap: uid sAMAccountName
olcRwmMap: cn displayName
olcRwmMap: gidNumber objectSid:-SIDTOGID # Требует скрипта для конвертации SID в GID
olcRwmMap: uidNumber objectSid:-SIDTOUID # Требует скрипта для конвертации SID в UID
olcRwmMap: homeDirectory "/home/$sAMAccountName"
olcRwmMap: loginShell "/bin/bash"
Конвертация SID в числовой UID/GID - отдельная задача. Часто используют хэш-функции или выделяют диапазон ID, статически маппя его на группы AD. Более простой подход - использовать внешний скрипт или задать статический gidNumber для всех синхронизированных пользователей, управляя доступом через членство в группах, как описано в нашем руководстве по настройке управления доступом к TrueNAS через группы Active Directory.
Фильтрация объектов и ограничение области синхронизации
Чтобы не синхронизировать весь домен, используйте параметр searchbase и filter в директиве olcSyncrepl.
- Синхронизация только из определенного OU:
searchbase="OU=Users,OU=Company,DC=yourdomain,DC=local". - Синхронизация только пользователей, входящих в конкретную группу AD:
Добавьте в директивуolcSyncrepl:
filter="(&(objectClass=user)(memberOf=CN=NAS_Users,OU=Groups,DC=yourdomain,DC=local))" - Исключение отключенных учетных записей:
filter="(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"
Примените все конфигурационные файлы (sync_ad.ldif, rwm_mapping.ldif) с помощью ldapmodify -Y EXTERNAL -H ldapi:/// и перезапустите slapd: sudo systemctl restart slapd.
Проверьте синхронизацию, выполнив поиск на сервере OpenLDAP:
ldapsearch -x -H ldap://localhost -b "dc=yourdomain,dc=local" "(uid=testuser)"
Интеграция TrueNAS с OpenLDAP-прокси
Теперь, когда OpenLDAP содержит данные из AD, настроим TrueNAS на работу с ним.
- Войдите в веб-интерфейс TrueNAS.
- Перейдите в System Settings → Directory Services.
- На вкладке LDAP нажмите Configure (не используйте вкладку Active Directory).
- Заполните параметры:
- Hostname: IP-адрес или FQDN вашего OpenLDAP-сервера.
- Base DN: Корень, где находятся пользователи в OpenLDAP (например,
dc=yourdomain,dc=local). - Bind DN: Учетная запись для привязки TrueNAS к OpenLDAP (например,
cn=admin,dc=nas,dc=local). - Bind Password: Пароль для этой учетной записи.
- Enable: Поставьте галочку.
- В Advanced Options:
- User Base DN: Можно оставить пустым или уточнить (например,
OU=Users,DC=yourdomain,DC=local). - Group Base DN: Аналогично для групп.
- User Object Class:
posixAccount(если использовали маппинг rwm). - User Name Attribute:
uid. - Group Object Class:
posixGroup. - Group Name Attribute:
cn. - Kerberos Realm: Оставьте пустым (если не настраивали Kerberos отдельно).
- Kerberos Principal: Оставьте пустым.
- Enable SSL/TLS: Выберите
ON, если используете LDAPS (порт 636). Для StartTLS выберитеSTARTTLS. - Validate Certificates: Включите, если у OpenLDAP есть сертификат от доверенного CA.
- User Base DN: Можно оставить пустым или уточнить (например,
- Нажмите Save.
Тестирование подключения и аутентификации
В интерфейсе Directory Services нажмите кнопку Test LDAP Configuration или Verify Credentials. Введите логин и пароль пользователя, который синхронизирован из AD. Должно появиться сообщение об успешной проверке.
Попробуйте войти по SSH на TrueNAS с учетными данными доменного пользователя: ssh testuser@truenas-ip. Или попытайтесь подключиться к общему ресурсу SMB (CIFS) с Windows, используя доменные учетные данные.
Если аутентификация не работает, проверьте логи TrueNAS: tail -f /var/log/middleware.log или tail -f /var/log/samba/log.smbd. На стороне OpenLDAP смотрите логи: sudo journalctl -u slapd -f.
Отладка и решение типовых проблем
Если что-то пошло не так, действуйте по цепочке снизу вверх.
- Проверка доступности OpenLDAP с сервера TrueNAS:
nc -zv <openldap-server> 389 ldapsearch -x -H ldap://<openldap-server> -b "" -s base - Проверка синхронизации OpenLDAP-AD. На сервере OpenLDAP убедитесь, что данные есть:
ldapsearch -x -H ldap://localhost -b "DC=yourdomain,DC=local" "(uid=*)" | head -20 - Анализ логов OpenLDAP (slapd). Увеличьте уровень детализации:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// <<EOF dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats sync EOF sudo systemctl restart slapd sudo journalctl -u slapd -f
Проблемы с атрибутами и членством в группах
Самая частая проблема: пользователи видны, но доступ к ресурсам не работает из-за неправильного маппинга групп.
1. Убедитесь, что группы синхронизированы. Найдите группу в OpenLDAP:
ldapsearch -x -H ldap://localhost -b "DC=yourdomain,DC=local" "(&(objectClass=posixGroup)(cn=nas_users))"
2. Проверьте, что у пользователя заполнен атрибут memberOf (или его маппированный эквивалент) в OpenLDAP:
ldapsearch -x -H ldap://localhost -b "DC=yourdomain,DC=local" "(uid=testuser)" memberOf
3. В TrueNAS в настройках LDAP убедитесь, что Group Base DN указывает на правильное расположение групп. Если группы не определяются, попробуйте в Group Name Attribute указать sAMAccountName вместо cn и перезапустите службу Directory Services.
Безопасность и лучшие практики эксплуатации
- Отдельный service account в AD: Используйте учетную запись только для чтения с ограниченными правами на конкретные OU. Регулярно меняйте пароль.
- Обязательное шифрование: Никогда не используйте LDAP без TLS. Настройте LDAPS (порт 636) или StartTLS. Для этого потребуется настроить SSL-сертификаты и на контроллерах домена, как описано в нашем руководстве по защищенному подключению TrueNAS к Active Directory через SSL/TLS.
- Фильтрация на входе: Синхронизируйте только необходимые OU и группы. Исключайте отключенные и служебные учетные записи.
- Мониторинг: Настройте оповещение о остановке службы slapd. Регулярно проверяйте логи на наличие ошибок синхронизации.
- Резервное копирование конфигурации OpenLDAP: Периодически выгружайте конфигурацию:
sudo slapcat -n 0 -l config_backup.ldif(для cn=config) иsudo slapcat -n 1 -l data_backup.ldif(для данных). - Обновления: Регулярно обновляйте OpenLDAP и ОС для закрытия уязвимостей.
Альтернативы и заключение
Интеграция через OpenLDAP - не единственный путь. Рассмотрим альтернативы:
- Прямая интеграция TrueNAS-AD: Проще в настройке (все делается в веб-интерфейсе TrueNAS). Подходит для простых сценариев. Недостатки: меньше контроля, прямая связь с доменом, возможные сложности с маппингом сложных структур групп.
- Использование FreeIPA: FreeIPA - полноценная инфраструктура управления идентификацией с LDAP, Kerberos, DNS. Может синхронизироваться с AD через trusts или одностороннюю синхронизацию. Более комплексное, но и более сложное в развертывании решение. Подробнее о сравнении AD и FreeIPA для TrueNAS читайте в нашей статье Active Directory vs FreeIPA: интеграция с TrueNAS.
Итог: Схема с OpenLDAP в качестве прокси-сервера между TrueNAS и Active Directory оправдана в средах, где критически важны безопасность, изоляция инфраструктуры хранения и тонкий контроль над синхронизируемыми данными. Несмотря на повышенную сложность начальной настройки, это решение обеспечивает долгосрочную гибкость и управляемость, особенно в крупных или требовательных к безопасности организациях. После настройки связки вы можете перейти к детальной настройке сетевого доступа к файлам, используя наше практическое руководство по настройке SMB, NFS и FTP в TrueNAS.
Для автоматизации работы с различными API, включая те, что могут потребоваться для мониторинга такой инфраструктуры, рассмотрите использование сервиса AiTunnel - агрегатора API для более 200 моделей нейросетей, который позволяет удобно интегрировать ИИ-функциональность в ваши скрипты и системы управления.