原来的
我正在运行 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)
。
- 为什么命令要求我输入 LDAP 密码。标准用户不应该知道该密码
- 为什么程序会因凭证无效而终止?
在我的/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
我需要做什么才能让用户更改密码?
编辑
针对 Simon Schürg 的回答,我添加了以下内容/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 客户端”)上登录。
編輯2
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"
如果答案缺少任何信息,请告诉我,我将编辑问题并向您提供信息。
答案1
如果通过 PAM 全局启用 LDAP 身份验证并配置密码文件 /etc/pam.d/passwd,用户可以通过密码命令就像本地 Unix 帐户常用的命令一样。
我希望您已经能够使用 ldap 用户登录。
为了允许使用 passwd 命令更改密码,你必须编辑密码文件 /etc/pam.d/passwd并添加
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
- - - 编辑 - - -
您也可以使用,而不必手动编辑配置文件验证配置在 centos 客户端上配置 ldap。以下命令配置 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 ~ %