Я установил аутентификацию LDAP для PAM на машине Ubuntu 16.04. Я не могу войти через SSH, хотя знаю, что пароль правильный. Моя цель - иметь список локальных пользователей, и любой, у кого есть учетная запись на локальном сервере LDAP, также может войти в систему (эти пользователи (пока) неизвестны машине Ubuntu). Я ожидаю, что пользователи будут созданы при первом входе в систему, включая их домашнюю папку (но не в этом суть этой публикации).
Основной файл конфигурации LDAP:
# awk '! /^$/ && ! /^#/' /etc/ldap.conf
base OU=MyOrg,DC=myit,DC=local
uri ldaps://ad.myit.local:636/
ldap_version 3
binddn ldap@myit.local
bindpw XXXXX
pam_lookup_policy yes
pam_password md5
nss_base_passwd ou=MyOrg,dc=local?sub
nss_base_shadow ou=MyOrg,dc=myit,dc=local?sub
nss_base_group ou=MyOrg,dc=myit,dc=local?sub
nss_map_objectclass posixAccount user
nss_map_objectclass shadowAccount user
nss_map_attribute uid sAMAccountName
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute shadowLastChange pwdLastSet
nss_map_objectclass posixGroup group
nss_map_attribute uniqueMember member
pam_login_attribute sAMAccountName
pam_filter objectclass=User
pam_password ad
nss_map_attribute userPassword authPassword
ssl on
debug 10
logdir /var/log/ldap
Я не знаю всех настроек LDAP-сервера (я им не управляю), но я знаю, что атрибут входа в систему sAMAccountName
, URI сервера и DN / пароль привязки верны (см. примеры с ldapsearch
ниже).
Вот соответствующие файлы конфигурации аутентификации:
# /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: files ldap
group: files ldap
shadow: files ldap
gshadow: files
hosts: files mdns4_minimal [NOTFOUND=return] dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
и
#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth optional pam_ecryptfs.so unwrap
# end of pam-auth-update config
Таким образом, в основном PAM сначала попробует unix, а если пользователь не существует, он попробует LDAP, прежде чем отказать.
Вот доказательство того, что учетные данные первой привязки действительны:
# ldapsearch -H ldaps://ad.myit.local:636 -b 'ou=MyOrg,dc=myit,dc=local' -D ldap@myit.local -W | grep -P 'distinguishedName.*DUFFEZ'
Enter LDAP Password: (XXXX)
distinguishedName: CN=Benoit DUFFEZ,OU=MyOrg,DC=myit,DC=local
Затем выполняется привязка с использованием DN, полученного при поиске при первой привязке:
# ldapsearch -H ldaps://ad.myit.local:636 -b 'ou=MyOrg,dc=myit,dc=local' -D "CN=Benoit DUFFEZ,OU=MyOrg,DC=myit,DC=local" -W | grep -P 'distinguishedName.*DUFFEZ'
Enter LDAP Password: (my password)
distinguishedName: CN=Benoit DUFFEZ,OU=MyOrg,DC=myit,DC=local
Так что это работает.
Теперь, если я использую SSH, он не работает и auth.log
говорит:
Jun 26 14:28:21 xxx sshd[6925]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.5.177
Jun 26 14:28:21 xxx sshd[6925]: pam_ldap: error trying to bind as user "CN=Benoit DUFFEZ,OU=MyOrg,DC=myit,DC=local" (Invalid credentials)
Jun 26 14:28:23 xxx sshd[6925]: Failed password for invalid user bdu from 192.168.5.177 port 48780 ssh2
Я проанализировал логи (см. debug 10
в ldap.conf
) и ошибка:
LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db1
Предположительно это действующий пользователь, но неверные учетные данные.
Я не понимаю, что случилось? Связывание DN в auth.log
точно такой же, как тот, который я использовал со своим ldapsearch
команда, тот же пароль, но не работает.