Назад | Перейти на главную страницу

Аутентификация FreeBSD LDAP, pam_ldap, привязка невозможна

Мне удалось заставить некоторые из моих серверов linux аутентифицировать пользователей на моем сервере каталогов LDAP, но у меня возникли проблемы с попытками сделать это с помощью nss_ldap и pam_ldap во FreeBSD.

Исходя из официальных документов FreeBSD здесь: http://www.freebsd.org/doc/en/articles/ldap-auth/client.html

Я устанавливаю 2 пакета и создаю файл конфигурации /usr/local/etc/ldap.conf, а также символическую ссылку на этот файл в том же каталоге, nss_ldap.conf. Согласно документации, они оба могут использовать один и тот же файл конфигурации. Я делаю это очень простым, пока не смогу заставить его работать:

ldap.conf / nss_ldap.conf:

base    dc=corp,dc=example,dc=org
host    192.168.0.100
ldap_version 3
binddn cn=admin,dc=corp,dc=example,dc=org
bindpw secret

Насколько я могу судить, NSS работает. «Getent passwd» показывает информацию из каталога LDAP, а также локальные данные.

Теперь я хочу пройти аутентификацию, поэтому добавляю строку в /etc/pam.d/sshd:

# auth
auth        sufficient  pam_opie.so     no_warn no_fake_prompts
auth        requisite   pam_opieaccess.so   no_warn allow_local
#auth       sufficient  pam_krb5.so     no_warn try_first_pass
#auth       sufficient  pam_ssh.so      no_warn try_first_pass
auth        sufficient  /usr/local/lib/pam_ldap.so no_warn try_first_pass debug
auth        required    pam_unix.so     no_warn try_first_pass

Я перезапускаю ssh (не уверен, что это необходимо), а затем пытаюсь войти в систему с пользователем LDAP, который не существует локально (coryj). Он не работает тихо, и журналы показывают:

Sep  9 13:13:54 freebsd-testbox sshd[12684]: pam_ldap: error trying to bind as user "uid=coryj,ou=Users,dc=corp,dc=example,dc=org" (Invalid credentials)

Почему он пытается установить связь с пользователем, которого я пытаюсь аутентифицировать, когда я указал binddn / bindpw? Я также пробовал rootbinddn с файлом .secret с тем же результатом. В linux binddn вроде работает, а здесь его игнорируют.

Я знаю, что мои файлы ldap.conf и pam потребуют дополнительной работы, просто пытаюсь убедить эту штуку привязать как admin при аутентификации на этом этапе.

Вот как вкратце работает аутентификация LDAP:

  1. Вы используете SSH как joeblow. Ваш клиент дает это имя серверу вместе с вашим паролем (который вы вводите).
  2. Сервер начинает просматривать список PAM, спрашивая «Кто-нибудь поручился за этого парня?», Ища либо ОК, либо НЕТ. (Модули PAM могут как запрещать, так и разрешать). В твоем случае:
    1. Он проверяет pam_opie.so. Вы сказали, что этого достаточно, поэтому он просто будет двигаться дальше, если не найден. Думаю, дело не в этом.
    2. Он проверяет pam_opieaccess.so. В этом случае это необходимо, поэтому pam_opieaccess.so должен сказать «да, он в порядке». Я предполагаю, что этот модуль просто проверяет список учетных записей, помеченных как «должен пройти авторизацию через OPIE», что joeblow не включен. Там написано ОК.
    3. /usr/local/lib/pam_ldap.so получает очередь. Это то, о чем вы заботитесь.
      1. Сначала он связывается с сервером с вашим binddn и bindpw, чтобы спросить "эй, у меня есть это joeblow здесь, как его настоящее имя? »Сервер отвечает uid=joeblow,ou=Users,dc=corp,dc=example,dc=org.
      2. pam_ldap.so отключается и пытается привязать как uid=joeblow,ou=Users,dc=corp,dc=example,dc=org с введенным вами паролем. Если он может связать, вы в деле. Если нет, то нет.

Таким образом, ошибка, которую вы получаете, означает, что на шаге 2.3.2 произошел сбой, вероятно, из-за неправильного пароля. Возможно, есть другая проблема с joeblow привязки к серверу, проверьте журналы сервера LDAP для получения дополнительных сведений.

В binddn и bindpw параметры управляют начальным поиском, который преобразует имя пользователя в отличительное имя LDAP - проверка пароля LDAP выполняется путем привязки к каталогу LDAP в качестве пользователя, пытающегося аутентифицироваться (если вы смогли выполнить привязку, значит, проверка прошла успешно).
Видеть man pam_ldap для получения дополнительной информации об этом.

В вашем случае я подозреваю, что либо пароль, который вы вводите для coryj неверно (возможно, их пароль LDAP поврежден?), или coryj не может подключиться к каталогу по другим причинам. Попробуйте связать с ldapwhoami или ldapsearch и посмотрите, не появится ли полезное сообщение об ошибке.