前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
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 账户和密码。它还会告诉您定义了这些信息的配置数据库。我们还将这些信息写入了我们的家目录下的一个文件中,以便在获得新密码哈希后进行修改:
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
这将在 cn=config
DIT 中更改管理员密码。
在普通 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 通常用于存储帐户信息,因此了解如何正确管理密码非常重要。大多数情况下,这个过程相对简单,但对于更复杂的操作,您仍然应该能够通过一些努力修改密码。