如何在 OpenLDAP 服务器上更改账户密码

介绍

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通常用于存储帐户信息,所以重要的是要知道如何正确管理密码. 通常情况下,该过程相对简单,但对于更密集的操作,您仍然应该能够通过一点工作来修改密码。

Published At
Categories with 技术
Tagged with
comments powered by Disqus