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

介绍

LDAP系统通常用于存储用户帐户信息。事实上,一些最常用的LDAP身份验证方法包括存储在LDAP条目中的帐户信息。

无论您的LDAP条目是由外部服务还是仅用于特定于LDAP的授权绑定的帐户信息,对于密码管理的理解都很重要。在本教程中,我们将讨论如何修改LDAP条目的密码。

要完成本教程,你需要具备一台OpenLDAP服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

更改自己的用户密码

更改密码的功能由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的新密码,然后系统将提示您输入绑定到admin条目以进行更改所需的密码。

更改RootDN密码

如果您忘记了LDAP管理密码,则需要在LDAP系统的服务器上拥有root或sudoaccess才能重置它。登录到您的服务器以开始使用。

查找当前的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

系统将提示您输入并确认要使用的新密码。散列值将附加到文件末尾。

更改配置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=configDIT更改管理密码。

更改普通DIT中的密码

这已经更改了管理DIT中条目的密码。但是,我们仍然需要修改常规DIT中的条目。目前旧密码和新密码都有效。我们可以通过使用新凭据修改常规DIT条目来解决此问题。

再次打开LDIF文件:

nano ~/newpasswd.ldif

使用之前注释掉的RootDN值替换行dn:中的值。此条目是我们更改密码的新目标。我们还需要用userPassword改变olcRootPW的产生,才能进行修改正确的值。完成后,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通常用于存储帐户信息,因此了解如何正确管理密码非常重要。大多数情况下,该过程相对简单,但对于更密集的操作,您仍然可以通过更多操作来修改密码。

更多Linux教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Change Account Passwords on an OpenLDAP Server》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Rainbond开源「容器云平台」

好雨云帮一周问答集锦(2017.04.17-2017.04.23)

1363
来自专栏FreeBuf

sudo-snooper:一款伪装成sudo命令的“蜜罐”脚本

sudo-snooper是一款伪装成sudo命令的“蜜罐”脚本,可以帮助渗透测试人员进行系统密码的获取。 安装步骤 Option 1:在原生sodu的安装位置安...

1917
来自专栏跟着阿笨一起玩NET

C#.Net组件开发 - 使用Attach to Process实时调试设计器代码(转)

本文转载于:CS框架网http://www.csframework.com/archive/2/arc-2-20110829-1811.htm

1772
来自专栏cloudskyme

WSO2 ESB(1)

什么是WSO2 ESB? WSO2 ESB是一个轻量级的易于使用的企业服务资源总线。WSO2 ESB允许系统管理员和SOA架构师,消息路由,虚拟化,中介,转换,...

3714
来自专栏上善若水

013android初级篇之Android Studio 引用源码模块,jar及so文件

013android初级篇之Android Studio 引用源码模块,jar及so文件

1682
来自专栏杂烩

javaee项目性能检测之JavaMelody

    它并不是一个模拟请求类似JMeter的压力测试工具,而是一个衡量并且计算在应用上的操作信息的工具,也就是说,它只负责对行为进行监控,而不负责触发操作。J...

2852
来自专栏帅小子的日常

sso系统使用

1433
来自专栏云计算教程系列

你的nginx访问过慢?增加个模块吧!

ngx_pagespeed 是nginx web服务器的一个模块,通过安装它你的网站加载速度将会“嗖”的一下上升。

8843
来自专栏玩转JavaEE

Spring Cloud Bus之RabbitMQ初窥

和Spring Cloud Config一样,我们接下来要聊的Spring Cloud Bus也是微服务架构系统中的必备组件。Spring Cloud Bus可...

3566
来自专栏pangguoming

centos7上安装redis

关闭防火墙: systemctl stop firewalld.service #停止firewall systemctl disable firewalld....

56210

扫码关注云+社区

领取腾讯云代金券