前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在OpenLDAP服务器上更改帐户密码

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

原创
作者头像
朝朝
修改2018-09-21 09:58:07
9.9K0
修改2018-09-21 09:58:07
举报

介绍

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实现需要这样,所以最好进行设置。

通常,命令像这样:

代码语言:javascript
复制
ldappasswd -H ldap://server_domain_or_IP -x -D "user_dn" -W -A -S

这将连接到指定的LDAP服务器,使用用户DN条目进行身份验证,然后发出一系列提示。系统将要求您提供并确认旧密码,新密码,然后您需要再次提供旧密码才能进行实际绑定。之后,您的密码将会更改。

由于您无论如何都要更改密码,因此在命令行上通过提示更容易输入旧密码。你可以这样做:

代码语言:javascript
复制
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该条目的,则可以输入:

代码语言:javascript
复制
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中也可用。我们可以通过输入以下内容找到我们要查找的信息:

代码语言:javascript
复制
sudo ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif

这应该返回DIT的rootDN帐户和密码。它还会告诉您配置数据库的位置。我们还将此信息写入主目录中的文件,以便在获得新密码哈希后可以对其进行修改:

DIT的RootDN和RootPW

代码语言:javascript
复制
dn: olcDatabase={1}hdb,cn=config
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3

哈希新密码

接下来,我们可以使用该slappasswd实用程序来散列新密码。我们想要使用查询olcRootPW行中的相同哈希,由带前缀的前缀值表示。在我们的例子中是{SSHA}

使用该slappasswd实用程序为我们要使用的密码生成正确的哈希值。我们将新哈希附加到我们用最后一条命令创建的文件的末尾。如果您使用的是非root帐户,则需要指定命令的完整路径:

代码语言:javascript
复制
/usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif

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

更改配置DIT中的密码

现在,我们可以编辑该文件以构造有效的LDIF命令来更改密码。打开我们写过的文件:

代码语言:javascript
复制
nano ~/newpasswd.ldif

它的内容如下:

代码语言:javascript
复制
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。内容如下:

代码语言:javascript
复制
dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}ncCXAJ5DjfRWgxE9pz9TUCNl2qGQHQT3
​
{SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

现在,删除该行olcRootPW中的哈希值,并将其替换为您在下面生成的哈希值。删除任何无关的行。现在的文件内容如下:

代码语言:javascript
复制
dn: olcDatabase={1}hdb,cn=config
#olcRootDN: cn=admin,dc=example,dc=com
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

完成后保存并关闭文件。

现在,我们可以输入以下内容来应用更改:

代码语言:javascript
复制
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif

这将用cn=configDIT更改管理密码。

更改普通DIT中的密码

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

再次打开LDIF文件:

代码语言:javascript
复制
nano ~/newpasswd.ldif

使用之前注释掉的RootDN值替换行dn:中的值。此条目是我们更改密码的新目标。我们还需要用userPassword改变olcRootPW的产生,才能进行修改正确的值。完成后,LDIF文件应如下所示:

代码语言:javascript
复制
[output ~/newpasswd.ldif]
dn: cn=admin,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw

保存并关闭文件。

现在,我们可以通过使用我们在配置DIT中设置的新密码绑定来修改该条目的密码。您需要绑定到RootDN条目才能执行操作:

代码语言:javascript
复制
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》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
    • 更改自己的用户密码
      • 使用RootDN绑定更改用户密码
        • 更改RootDN密码
          • 查找当前的RootDN信息
          • 哈希新密码
          • 更改配置DIT中的密码
          • 更改普通DIT中的密码
        • 结论
        相关产品与服务
        多因子身份认证
        多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档