如何在 CentOS 上以用户身份更改 openldap 密码?

如何在 CentOS 上以用户身份更改 openldap 密码?

原来的

我正在运行 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)

  1. 为什么命令要求我输入 LDAP 密码。标准用户不应该知道该密码
  2. 为什么程序会因凭证无效而终止?

在我的/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 --testroot 或用户身份执行时,输出会有所不同:

以 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 ~ %

相关内容