Мне нужно, чтобы наши серверы freebsd авторизовались через AD, но это вызывает у меня проблемы.
Среда: серверная часть AD (Win 2k8r2). Это работает с другими хостами Linux, которые авторизуются через SSSD.
FreeBSD 9.1 для клиентских серверов
Я настроил все, что мог придумать, и я думаю, что это правильно, но когда я пытаюсь войти в систему с учетной записью AD, это не удается:
pam_ldap: error trying to bind as user "CN=testuser,CN=Users,DC=example,DC=com" (Invalid credentials)
Итак, я знаю, что первоначальное связывание прошло, поскольку возвращаемый DN правильный и был получен с сервера AD. Когда он затем пытается привязаться к этому DN, он не может, что приводит к сбою аутентификации. Я протестировал кредиты тестового пользователя на сервере AD, используя ldapsearch, и даже установил его в качестве DN привязки по умолчанию в ldap.conf, и он работает для всех тестов.
Я не могу понять, почему начальная привязка работает, но затем привязка пользователя не работает.
Для справки вот мои файлы конфигурации:
/usr/local/etc/ldap.conf
pam_login_attribute uid
base dc=example,dc=com
uri ldap://xxx.xxx.xxx.xxx/
ssl no
binddn CN=ro_user,CN=Users,DC=example,DC=com
bindpw somerandompw
/usr/local/etc/openldap/ldap.conf
pam_login_attribute uid
base dc=example,dc=com
uri ldap://xxx.xxx.xxx.xxx/
ssl no
/etc/pam.d/sshd
auth sufficient pam_opie.so no_warn no_fake_prompts
auth requisite pam_opieaccess.so no_warn allow_local
auth sufficient /usr/local/lib/pam_ldap.so no_warn debug
auth required pam_unix.so no_warn try_first_pass
account required pam_nologin.so
account required pam_login_access.so
account required pam_unix.so
account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user
session required pam_permit.so
password required pam_unix.so no_warn try_first_pass
РЕДАКТИРОВАТЬ: У меня была мысль - кто-нибудь знает, действительно ли pam_ldap использует один и тот же процесс привязки / аутентификации для начальной привязки и привязки аутентификации? Я изо всех сил пытаюсь понять, как привязка может быть успешной, когда это начальная привязка, но терпит неудачу, когда это привязка для аутентификации.
Я весь день боролся с ошибкой, очень похожей на приведенную выше. В моем случае я видел такие сообщения:
Nov 26 15:19:25 digitalocean sshd[2373]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=60.196-30-62.static.virginmediabusiness.co.uk
Nov 26 15:19:25 digitalocean sshd[2373]: pam_ldap: error trying to bind as user "cn=dan.howard,ou=users,dc=example,dc=com" (Invalid credentials)
Nov 26 15:19:27 digitalocean sshd[2373]: Failed password for invalid user dan.howard from 62.30.196.60 port 63534 ssh2
«Недействительные учетные данные» - это отвлекающий маневр, и важная вещь - «недействительный пользователь dan.howard». По-видимому, NSS сначала будет искать имя пользователя, и если он не распознает имя, тогда пароль, отправленный на сервер LDAP, будет буквальной строкой 'НЕПРАВИЛЬНО', что, конечно, обязательно неверно и кажется очень странное поведение со мной (подробнее https://unix.stackexchange.com/questions/163213/ while-trying-to-ssh-pam-ldap-always-sends-the-password-incorrect-causing-bind)
Я видел множество руководств, в которых мне предлагалось поместить ldap в мой файл /etc/nsswitch.conf для строк passwd, group и shadow, а затем перезапустить nscd.
Я сделал это, и он сказал [хорошо], поэтому я не мог понять, что пошло не так.
Оказывается, у меня вообще не был установлен модуль ldap nss. Все, что мне нужно было сделать, это следующее:
apt-get установить libnss-ldap
Затем NSS смог идентифицировать пользователей LDAP, что означало, что PAM отправит правильные пароли, и я смог войти в систему. Надеюсь, это поможет кому-то другому.
Пара вещей:
1.) Если вы вводите getent passwd $ username для пользователя, который существует только в ldap, возвращает ли он правильную запись?
2.) Как выглядит ваш файл /etc/pam.d/system-auth.
3.) Правильно ли он возвращает результаты для
ldapsearch -D $BINDDN -W -H ldap://$HOST 'uid=$RANDOM_USER'
Наконец, похоже, что binddn, который у вас есть в /usr/local/etc/ldap.conf, использует ro_user, а binddn pam аутентифицируется с помощью testuser. Почему несоответствие. Убедитесь, что оба работают с ldapsearch
В моем случае, если это может помочь, я забыл добавить ldap
модуль в /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat ldap
group: compat ldap
shadow: compat ldap
gshadow: files ldap