Я пытаюсь настроить libnss-ldap для обеспечения аутентификации AD на моих серверах Linux Debian. Это нормально работает, если пользователь существует локально, я хочу, чтобы он работал для пользователей домена.
Вот содержимое моего файла /etc/ldap.conf:
host $AD_IP
base ou=Users,dc=MY,dc=DOMAIN
uri ldap:///$AD_IP
ldap_version 3
binddn $user@MY.DOMAIN
bindpw $password
pam_filter objectclass=user
nss_base_passwd ou=Users,dc=MY,dc=DOMAIN
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uniqueMember Member
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_objectclass posixGroup Group
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password ad
Вот мой /etc/nsswitch.conf
passwd: compat ldap
group: compat ldap
shadow: compat ldap
...
Когда я ввожу команду
getent passwd
Результатом будет локальный файл / etc / passwd. Но tcpdump показывает, что запрос к AD выполнен правильно, и AD возвращает весь список пользователей. Я думаю, что данные, полученные командой getent, неправильно интерпретируются (nss_map_ * неправильно настроен?), И, следовательно, getent наконец возвращает локальную информацию (nsswitch сначала пытается ldap, а затем compat).
Как исправить эту конфигурацию /etc/ldap.conf, чтобы она работала?
Большое спасибо
Если можно, я порекомендую изменить способ аутентификации пользователей в вашей AD.
libnss-ldap - очень старая библиотека с множеством утечек памяти, и она не обновлялась годами. Я не знаю, почему это все еще доступно в дистрибутивах, и люди продолжают предлагать использовать его, когда у нас есть более эффективные решения.
Я никогда не пользовался AD, но уверен sssd может справиться с этим очень хорошо.
Первая ссылка, которую я получил от Google: https://blog.dlasley.net/2013/06/configure-linux-for-active-directory-authentication-with-sssd/
Я только начал использовать sssd для подключения к моему серверу OpenLDAP после того, как чуть не убил себя, делая патчи для libnss-ldap и libpam-ldap.
Еще одна библиотека, которая может сработать для вас, если по какой-то причине вы не можете заставить работать sssd. Это libnss-ldapd, это версия, основанная на libnss-ldap, и она до сих пор получает обновления, определенно лучше, чем libnss-ldap, а последняя версия (0.9) имеет практически все функции, которые есть у libnss-ldap.
Имейте в виду, что даже если sssd правильно настроен при использовании getent passwd
чтобы получить весь список, вы не получаете список пользователей из LDAP.
Для тестирования вы можете использовать $ id <ldap_user>
или $ getent passwd <ldap_user>
getent
только работает только с libnss-ldap или libnss-ldapd.