如何在 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 管理密码,则需要拥有 root 权限或sudo
LDAP 系统服务器的访问权限才能重置密码。登录您的服务器即可开始。
查找当前 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 帐户和密码。它还将告诉您定义此内容的配置数据库。我们还将此信息写入主目录中的文件中,以便我们在获得新密码哈希后可以对其进行修改:
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
系统将提示您输入并确认要使用的新密码。哈希值将附加到文件末尾。
更改配置 DIT 中的密码
现在,我们可以编辑文件来构造有效的 LDIF 命令来更改密码。打开我们一直写入的文件:
nano ~/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
。它看起来像这样:
dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
现在,删除行中的哈希olcRootPW
并将其替换为您在下面生成的哈希。删除所有多余的行。它现在应该看起来像这样:
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
这将更改 DIT 内的管理密码cn=config
。
更改普通 DIT 中的密码
这已更改管理 DIT 中条目的密码。但是,我们仍需要修改常规 DIT 中的条目。目前,旧密码和新密码均有效。我们可以通过使用新凭据修改常规 DIT 条目来解决这个问题。
再次打开 LDIF 文件:
nano ~/newpasswd.ldif
将行中的值替换dn:
为您之前注释掉的 RootDN 值。此条目是我们更改密码的新目标。我们还需要更改出现的两个olcRootPW
,以便userPassword
我们修改正确的值。完成后,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 通常用于存储帐户信息,因此了解如何正确管理密码非常重要。大多数情况下,这个过程相对简单,但对于更复杂的操作,您仍然应该能够通过一点努力来修改密码。