Я использую систему аутентификации openldap-2.4.40 и хочу, чтобы пользователь мог самостоятельно изменить свой пароль. С динамической конфигурацией (то есть я не использую slapd.conf
для конфигурации, но файлы в cn=config
каталог), я попытался изменить пароль с помощью
ldappasswd -x -D "uid=<my_user>,ou=Users,dc=<some>,dc=<dc>" -W -A -S
Это запрашивает у меня мой старый пароль (дважды) и новый, а затем запрашивает пароль LDAP, заканчивающийся сообщением об ошибке: ldap_bind: Invalid credentials (49)
.
В моем /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif
У меня есть следующие настройки для olcAccess
:
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage by * none
Что мне нужно сделать, чтобы пользователь мог изменить свой пароль?
Отвечая на ответ Саймона Шюрга, я добавляю содержание /etc/pam.d/passwd
:
auth include system-auth
account include system-auth
password substack system-auth
-password optional pam_gnome_keyring.so use_authtok
password substack postlogin
Если я изменю пароль с помощью passwd
все работает нормально, и я могу войти в систему с новым паролем, но только на машине с запущенным сервером LDAP. Я не могу войти в систему на всех остальных машинах («клиенты LDAP»).
An ldapsearch
для пользователя или группы на сервере и на клиентских машинах обеспечивает одинаковый вывод. Тем не мение, authconfig --test
вывод отличается, если выполняется как root или как пользователь:
Выполняется как root:
nss_ldap is enabled
LDAP+TLS is disabled
LDAP server = "ldap://10.0.0.254"
LDAP base DN = "dc=example,dc=com"
pam_ldap is enabled
LDAP+TLS is disabled
LDAP server = "ldap://10.0.0.254"
LDAP base DN = "dc=example,dc=com"
LDAP schema = "rfc2307"
Выполняется как пользователь:
nss_ldap is enabled
LDAP+TLS is disabled
LDAP server = ""
LDAP base DN = ""
pam_ldap is enabled
LDAP+TLS is disabled
LDAP server = ""
LDAP base DN = ""
LDAP schema = "rfc2307"
Если какая-либо информация для ответа отсутствует, сообщите мне, и я отредактирую вопрос и предоставлю вам информацию.
Если вы включите аутентификацию LDAP глобально через PAM и настроите /etc/pam.d/passwd, пользователи могут изменить свой пароль LDAP через пароль как обычно для локальных учетных записей Unix.
Я думаю, вы уже можете войти в систему с пользователями ldap.
Чтобы разрешить изменение пароля с помощью команды passwd, вам необходимо отредактировать /etc/pam.d/passwd и добавить
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
------ редактировать ------
Вместо редактирования файлов конфигурации вручную вы также можете использовать authconfig для настройки ldap на клиенте centos. Следующая команда настраивает аутентификацию LDAP таким образом, чтобы пользователи могли изменять свой пароль с помощью общей passwd
команда.
authconfig \
--enableldap \
--enableldapauth \
--ldapserver='ldap://example.com/' \
--ldapbasedn='dc=example,dc=com' \
--update
Возможно, вы также захотите использовать следующие флаги для сохранения локальной аутентификации и автоматического создания несуществующих домашних каталогов при входе в систему.
--enablemkhomedir \
--enableshadow \
--enablelocauthorize \
--passalgo=sha256 \
После выполнения предыдущей команды authconfig --test
для проверки настроек.
Проверьте следующие части вывода:
nss_ldap is enabled
LDAP+TLS is disabled
LDAP server = "ldap://example.com/"
LDAP base DN = "dc=example,dc=com"
pam_unix is always enabled
shadow passwords are enabled
password hashing algorithm is sha256
pam_ldap is enabled
LDAP+TLS is disabled
LDAP server = "ldap://example.com/"
LDAP base DN = "dc=example,dc=com"
LDAP schema = "rfc2307"
pam_mkhomedir or pam_oddjob_mkhomedir is enabled (umask=0077)
Always authorize local users is enabled ()
Сменить пароль для пользователей теперь просто:
ldapuser@centos ~ % passwd
Changing password for user ldapuser.
(current) LDAP Password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
ldapuser@centos ~ %