如何在 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 账户和密码。它还会告诉您定义了这些信息的配置数据库。我们还将这些信息写入了我们的家目录下的一个文件中,以便在获得新密码哈希后进行修改:

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 值找到您要修改的正确账户。如果有其他 dnolcRootDNolcRootPW 三元组,请删除它们。

确认 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 通常用于存储帐户信息,因此了解如何正确管理密码非常重要。大多数情况下,这个过程相对简单,但对于更复杂的操作,您仍然应该能够通过一些努力修改密码。

相关推荐

  1. 如何 OpenLDAP 服务器更改账户密码

    2024-04-12 07:34:06       53 阅读
  2. SE5微服务器如何设置root账户密码

    2024-04-12 07:34:06       67 阅读
  3. 服务器如何修改密码

    2024-04-12 07:34:06       55 阅读
  4. 如何服务器部署springboot项目

    2024-04-12 07:34:06       62 阅读
  5. 如何服务器传/下载文件

    2024-04-12 07:34:06       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 07:34:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 07:34:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 07:34:06       82 阅读
  4. Python语言-面向对象

    2024-04-12 07:34:06       91 阅读

热门阅读

  1. ubuntu下利用ffmpeg工具将视频帧推流至rtsp

    2024-04-12 07:34:06       47 阅读
  2. 0基础刷图论最短路 2(从ATcoder 0分到1800分)

    2024-04-12 07:34:06       39 阅读
  3. Golang教程四(协程,channel,线程安全,syncMap)

    2024-04-12 07:34:06       183 阅读
  4. Pytorch 获取当前模型占用的 GPU显存的大小

    2024-04-12 07:34:06       40 阅读
  5. 动态开辟字符串malloc

    2024-04-12 07:34:06       53 阅读
  6. vue监听键盘回车事件的三种方法

    2024-04-12 07:34:06       49 阅读
  7. 4.11 驱动开发

    2024-04-12 07:34:06       30 阅读
  8. kafka enable.auto.commit和auto.offset.reset使用说明

    2024-04-12 07:34:06       36 阅读
  9. H5如何中断已经发出去的网络请求

    2024-04-12 07:34:06       37 阅读