介绍
LDAP 系统通常用于存储用户帐户信息,事实上,一些最常见的 LDAP 身份验证方法涉及存储在 LDAP 条目中的帐户信息。
无论您的 LDAP 条目是由外部服务用于帐户信息,还是仅用于 LDAP 特定的授权绑定,密码管理变得重要,我们将在本指南中讨论如何修改 LDAP 条目的密码。
更改自己的用户密码
更改密码的能力由 LDAP 服务器的访问控制器管理。通常,LDAP 配置为允许帐户更改自己的密码。
我们可以使用ldappasswd
工具来修改用户帐户密码. 要更改您的密码,您需要将其绑定到LDAP用户登录并用当前的密码进行身份验证。
要更改密码,我们将不得不提供超出常规绑定参数的几个参数. 您应使用下列选项之一指定旧密码:
-a [oldpassword]
: -a
旗允许您作为命令行请求的一部分提供旧密码。* -A
* : 这个旗是对 -a
旗的替代品,在输入命令时会提示您使用旧密码。
您还需要使用以下选项之一指定新密码:
s [newpassword]
:用于在命令行上提供新密码的-s
旗帜。* -S
* :此变体的-s
旗帜在输入命令时会提示您新密码。
使用每个组中的一个选项,以及规则选项来指定服务器位置和绑定输入和密码,你可以更改你的LDAP密码. 从技术上讲,OpenLDAP并不总是需要旧的密码,因为它被用来绑定输入,但其他LDAP实现需要这一点,所以最好还是设置。
通常情况下,命令将看起来像这样的东西:
1ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -W -A -S
这将连接到指定的LDAP服务器,通过用户DN输入进行身份验证,然后发出一系列提示,您将被要求提供并确认旧密码,新密码,然后您需要再次提供旧密码,以便实际绑定发生。
由于您无论如何都会更改密码,所以在命令行上更容易提供旧密码,而不是通过提示。
1ldappasswd -H ldap://server_domain_or_IP -x -D "user's_dn" -w old_passwd -a old_passwd -S
使用 RootDN Bind 更改用户密码
) 条目和帐户本身。
若要更改其他用户的密码,您需要将其绑定到具有提升权限的条目,然后指定您想要更改的条目。
基本的ldappasswd
命令看起来非常相似,唯一的区别是你必须在命令的末尾指定输入以更改。如果你有旧密码,你可以使用-a
或-A
选项,但这通常不是用户更改密码时的情况。
例如,如果您的 LDAP 服务器的 rootDN 是 cn=admin,dc=example,dc=com
,并且您想要更改的密码是 uid=bob,ou=people,dc=example,dc=com
条目,您可以输入以下内容:
1ldappasswd -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W -S "uid=bob,ou=people,dc=example,dc=com"
您将被提示使用Bob的新密码,然后您将被要求使用必要的密码连接到管理员条目以进行更改。
更改 RootDN 密码
如果您忘记了 LDAP 管理密码,则需要在 LDAP 系统的服务器上使用 root 或 sudo
访问才能重置。
查找当前的 RootDN 信息
首先,您需要找到 RootDN 帐户和当前的 RootDN 密码哈希,这是在特殊的 cn=config
配置 DIT 中可用的。
1sudo ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
这应该返回 rootDN 帐户和您的 DIT 密码. 它还会告诉您定义此信息的配置数据库. 我们还将此信息写到我们的主目录中的一个文件中,以便在我们有新的密码哈希后,我们可以修改它:
1[label RootDN and RootPW for DIT]
2dn: olcDatabase={1}hdb,cn=config
3olcRootDN: cn=admin,dc=example,dc=com
4olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
Hashing 新密码
接下来,我们可以使用slappasswd
实用程序来哈希一个新的密码,我们希望使用我们所查询的olcRootPW
行中相同的哈希,标记为前缀值。
使用slappasswd
实用程序来生成我们想要使用的密码的正确哈希. 我们将新哈希附加到我们用最后命令创建的文件的末尾。
1/usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif
您将被要求输入并确认您想要使用的新密码. 哈希值将附加到我们的文件的末尾。
在配置中更改密码 DIT
现在,我们可以编辑文件来构建一个有效的LDIF命令来更改密码。
1nano ~/newpasswd.ldif
它应该看起来像这样的东西:
1[label ~/newpasswd.ldif]
2dn: olcDatabase={1}hdb,cn=config
3olcRootDN: cn=admin,dc=example,dc=com
4olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
5
6{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
您可能會有多個值,取決於您的 LDAP 伺服器是否有多個 DIT. 如果是這樣,請使用「olcRootDN」值來找到您想要修改的正確帳戶。
在您确认olcRootDN
行符合您正在尝试修改的帐户后,请评论它。下方,我们将添加两行。第一行应该指定changetype: modify
,第二行应该告诉LDAP您正在尝试取代:olcRootPW
。
1[label ~/newpasswd.ldif]
2dn: olcDatabase={1}hdb,cn=config
3#olcRootDN: cn=admin,dc=example,dc=com
4changetype: modify
5replace: olcRootPW
6olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
7
8{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
现在,删除在olcRootPW
行中的哈希,并将其替换为您在下面生成的哈希。
1[label ~/newpasswd.ldif]
2dn: olcDatabase={1}hdb,cn=config
3#olcRootDN: cn=admin,dc=example,dc=com
4changetype: modify
5replace: olcRootPW
6olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
保存并关闭文件,当你完成。
现在,我们可以通过键入应用更改:
1sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
这将改变cn=config
DIT 中的管理密码。
在正常 DIT 中更改密码
这改变了管理 DIT 中的输入密码,但我们仍然需要在常规 DIT 中更改输入,目前旧密码和新密码都是有效的,我们可以通过使用我们的新身份证来更改常规 DIT 输入来修复此问题。
再次打开 LDIF 文件:
1nano ~/newpasswd.ldif
用您之前评论的 RootDN 值替换 dn:
行中的值. 此条目是我们对密码更改的新目标。 我们还需要用 userPassword
更改 `olcRootPW 两种情况,以便我们修改正确的值. 完成后,LDIF 文件应该是这样的:
1[output ~/newpasswd.ldif]
2dn: cn=admin,dc=example,dc=com
3changetype: modify
4replace: userPassword
5userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
保存并关闭文件。
现在,我们可以通过使用我们在配置DIT中设置的新密码来对该条目进行绑定来修改该条目的密码,您将需要绑定到RootDN条目来执行操作:
1ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W -f ~/newpasswd.ldif
您将被提示在配置 DIT 中设置的新密码,一旦验证,密码将被更改,只留下新密码用于身份验证。
结论
LDAP通常用于存储帐户信息,所以重要的是要知道如何正确管理密码. 通常情况下,该过程相对简单,但对于更密集的操作,您仍然应该能够通过一点工作来修改密码。