如何更改OpenLDAP服务器上的帐户密码
介绍
LDAP 系统通常用于存储用户帐户信息。 事实上,一些最常见的 LDAP 身份验证方法涉及存储在 LDAP 条目中的帐户信息。
无论您的 LDAP 条目是由外部服务用于帐户信息还是仅用于特定于 LDAP 的授权绑定,理解密码管理都变得很重要。 在本指南中,我们将讨论如何修改 LDAP 条目的密码。
更改您自己的用户密码
更改密码的能力由 LDAP 服务器的访问控制管理。 通常,LDAP 配置为允许帐户更改自己的密码。 如果您作为用户知道您以前的密码,这将很有效。
我们可以使用ldappasswd
工具修改用户账号密码。 要更改密码,您需要绑定到 LDAP 用户条目并使用当前密码进行身份验证。 这遵循与其他 OpenLDAP 工具相同的一般语法。
为了更改密码,我们必须提供超出常规绑定参数的几个参数。 您应该使用以下选项之一指定旧密码:
- -a [oldpassword]:
-a
标志允许您提供旧密码作为命令行请求的一部分。 - -A:此标志是
-a
标志的替代,当输入命令时会提示您输入旧密码。 - -t [oldpasswordfile]:这个标志可以用来代替上面的从文件中读取旧密码。
您还需要使用以下选项之一指定新密码:
- -s [newpassword]:
-s
标志用于在命令行上提供新密码。 - -S:
-s
标志的这种变体将在输入命令时提示您输入新密码。 - -T [newpasswordfile]:这个标志可以用来代替上面的从文件中读取新密码。
使用每个组中的一个选项,以及指定服务器位置和绑定条目和密码的常规选项,您可以更改 LDAP 密码。 从技术上讲,OpenLDAP 并不总是需要旧密码,因为它用于绑定到条目,但其他 LDAP 实现需要这个,所以最好还是设置。
通常,该命令将如下所示:
ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -W -A -S
这将连接到指定的 LDAP 服务器,使用用户 DN 条目进行身份验证,然后发出一系列提示。 系统将要求您提供并确认旧密码和新密码,然后您需要再次提供旧密码才能进行实际绑定。 之后,您的密码将更改。
由于无论如何您都将更改密码,因此在命令行上而不是通过提示输入旧密码可能更容易。 你可以这样做:
ldappasswd -H ldap://server_domain_or_IP -x -D "user's_dn" -w old_passwd -a old_passwd -S
使用 RootDN 绑定更改用户密码
ldappasswd
工具还允许您作为 LDAP 管理员在需要时更改其他用户的密码。 从技术上讲,您可以绑定对帐户密码具有写入权限的任何帐户,但这种访问权限通常仅限于 rootDN(管理)条目和帐户本身。
要更改其他用户的密码,您需要绑定到具有提升权限的条目,然后指定要更改的条目。 通常,您将绑定到 rootDN(如果您需要了解如何找到此帐户,请参阅下一节)。
基本的 ldappasswd
命令看起来非常相似,唯一的区别是您必须在命令末尾指定要更改的条目。 如果您有旧密码可用,您可以使用 -a
或 -A
选项,但在更改用户密码时通常不是这种情况。 如果您没有旧密码,请将其关闭。
例如,如果您的 LDAP 服务器的 rootDN 是 cn=admin,dc=example,dc=com
,并且您希望更改的密码是 uid=bob,ou=people,dc=example,dc=com
条目,您可以键入:
ldappasswd -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 中可用。 我们可以通过键入以下内容找到我们正在寻找的信息:
sudo ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
这应该返回您的 DIT 的 rootDN 帐户和密码。 它还将告诉您定义它的配置数据库。 我们还将这些信息写入主目录中的文件,以便在获得新密码哈希后可以对其进行修改:
DIT 的 RootDN 和 RootPW
dn: olcDatabase={1}hdb,cn=config olcRootDN: cn=admin,dc=example,dc=com olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
散列新密码
接下来,我们可以使用 slappasswd
实用程序来散列新密码。 我们希望使用与我们查询的 olcRootPW
行中相同的哈希,由带大括号的前缀值指示。 在我们的例子中,这是 {SSHA}
。
使用 slappasswd
实用程序为我们要使用的密码生成正确的哈希值。 我们会将我们的新哈希附加到我们使用最后一个命令创建的文件的末尾。 如果您使用的是非 root 帐户,则需要指定命令的完整路径:
/usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif
系统将提示您输入并确认您要使用的新密码。 散列值将附加到我们文件的末尾。
在 Config DIT 中更改密码
现在,我们可以编辑该文件以构造一个有效的 LDIF 命令来更改密码。 打开我们一直在写入的文件:
nano ~/newpasswd.ldif
它应该看起来像这样:
~/newpasswd.ldif
dn: olcDatabase={1}hdb,cn=config olcRootDN: cn=admin,dc=example,dc=com olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3 {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
根据您的 LDAP 服务器是否有多个 DIT,您可能有多个值。 如果是这种情况,请使用 olcRootDN
值查找您要修改的正确帐户。 如果有的话,删除其他的 dn
, olcRootDN
, olcRootPW
三元组。
在您确认 olcRootDN
行与您尝试修改的帐户匹配后,将其注释掉。 在它下面,我们将添加两行。 第一行应该指定 changetype: modify
,第二行应该告诉 LDAP 您正在尝试 replace: olcRootPW
。 它看起来像这样:
~/newpasswd.ldif
dn: olcDatabase={1}hdb,cn=config #olcRootDN: cn=admin,dc=example,dc=com changetype: modify replace: olcRootPW olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3 {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
现在,删除 olcRootPW
行中的哈希并将其替换为您在下面生成的哈希。 删除任何无关的行。 它现在应该是这样的:
~/newpasswd.ldif
dn: olcDatabase={1}hdb,cn=config #olcRootDN: cn=admin,dc=example,dc=com changetype: modify replace: olcRootPW olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
完成后保存并关闭文件。
现在,我们可以通过键入以下内容来应用更改:
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
这将更改 cn=config
DIT 中的管理密码。
在普通 DIT 中更改密码
这已更改管理 DIT 中条目的密码。 但是,我们仍然需要修改常规 DIT 中的条目。 目前新旧密码均有效。 我们可以通过使用我们的新凭据修改常规 DIT 条目来解决此问题。
再次打开 LDIF 文件:
nano ~/newpasswd.ldif
将 dn:
行中的值替换为您之前注释掉的 RootDN 值。 此条目是我们更改密码的新目标。 我们还需要用 userPassword
更改 olcRootPW
的 both,以便我们修改正确的值。 完成后,LDIF 文件应如下所示:
[output ~/newpasswd.ldif] dn: cn=admin,dc=example,dc=com changetype: modify replace: userPassword userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
保存并关闭文件。
现在,我们可以通过使用我们在配置 DIT 中设置的新密码绑定到该条目来修改该条目的密码。 您需要绑定到 RootDN 条目才能执行操作:
ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W -f ~/newpasswd.ldif
系统将提示您输入您在配置 DIT 中设置的新密码。 一旦通过身份验证,密码将被更改,仅保留新密码用于身份验证。
结论
LDAP 通常用于存储帐户信息,因此了解如何正确管理密码非常重要。 大多数时候这个过程相对简单,但对于更密集的操作,您应该仍然可以通过一点工作来修改密码。