LDAP基础:8:ldap用户密码确认和修改

ldap用户密码的修改可以使用ldappasswd命令,也可以使用万能的ldapmodify结合ldif文件来实现,但所修改的都是普通的用户,cn=admin的管理员用户的修改一般可以通过slappasswd来进行,由于本系列使用了openldap的docker镜像,此项功能已被封装,通过设定环境变量即可轻易实现。

修改密码的常用方式

  • ldappasswd命令
  • ldapmodify命令结合ldif文件
  • slappasswd命令

管理员密码的设定

管理员密码的设定可以通过slappasswd,由于本系列文章的示例使用了osixia的openldap镜像,cn=admin的密码设定,只需要对环境变量LDAP_ADMIN_PASSWORD进行设定即可。

Option介绍

ldapmodify常用Option

ldapmodify常用的Option的信息和用途整理如下:

Option说明
-Hldapuri,格式为ldap://机器名或者IP:端口号,不能与-h和-p同时使用
-hLDAP服务器IP或者可解析的hostname,与-p可结合使用,不能与-H同时使用
-pLDAP服务器端口号,与-h可结合使用,不能与-H同时使用
-x使用简单认证方式
-D所绑定的服务器的DN
-w绑定DN的密码,与-W二者选一
-W不输入密码,会交互式的提示用户输入密码,与-w二者选一
-c出错后忽略当前错误继续执行,缺省情况下遇到错误即终止
-n模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位
-v显示详细信息
-d显示debug信息,可设定级别
-e设置客户端证书
-E设置客户端私钥

ldappasswd常用Option

ldappasswd常用的Option的信息和用途整理如下:

Option说明
-Hldapuri,格式为ldap://机器名或者IP:端口号,不能与-h和-p同时使用
-hLDAP服务器IP或者可解析的hostname,与-p可结合使用,不能与-H同时使用
-pLDAP服务器端口号,与-h可结合使用,不能与-H同时使用
-x使用简单认证方式
-D所绑定的服务器的DN
-w绑定DN的密码,与-W二者选一
-W不输入密码,会交互式的提示用户输入密码,与-w二者选一
-n模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位
-v显示详细信息
-d显示debug信息,可设定级别
-S交互式进行密码的提示和输入以及Re-enter,与-s二者选一
-s将指定内容设为密码,与-S二者选一

事前准备

  • 使用ldif方式创建barbara用户的信息
liumiaocn:openldap liumiao$ cat barbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: add
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@example.com
uid: bjensen
liumiaocn:openldap liumiao$ 
  • 用户添加
liumiaocn:openldap liumiao$ ldapadd -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f barbara.ldif
adding new entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$
  • 结果确认
liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin "uid=bjensen"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@example.com
uid: bjensen

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$

修改密码

方式1: ldappasswd不指定密码

不指定密码的情况下,ldappasswd会给你生成一个密码。ldap的用户密码是通过userPassword来保存的,但是在使用ldif的时候没有这个字段,所以可以使用前文中提到的方式使用ldapmodify来进行添加,也可使用如下方式:

liumiaocn:openldap liumiao$ ldappasswd -x -h 192.168.31.242 -p 389 -D "cn=admin,dc=example,dc=org" -w admin  "cn=Barbara Jensen,dc=example,dc=org"
New password: VSzhfbwA
liumiaocn:openldap liumiao$

可以看到自动创建了一个密码串VSzhfbwA给指定的Barbara用户,然后来重新对此用户进行确认,可以看到加密后的userPassword信息已经出现在LDIF中了。

liumiaocn:openldap liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "dc=example,dc=org" -D "cn=admin,dc=example,dc=org" -w admin "uid=bjensen"
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@example.com
uid: bjensen
userPassword:: e1NTSEF9ZDYwU1NNMjJxb05vOTZ6OHg4b1JVMmxuRmpKNmR2SjE=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:openldap liumiao$

结果验证

验证方法1: 使用java的JNDI

对修改的密码进行验证,可以使用前文中的Java的JNDI做的简单的代码进行验证:

liumiaocn:~ liumiao$ java LdapDemo 192.168.31.242 "cn=Barbara Jensen,dc=example,dc=org" "VSzhfbwA"
IPAdress: 192.168.31.242
Username: cn=Barbara Jensen,dc=example,dc=org
Password: VSzhfbwA
env setting
login verification begins...
login successfully.
liumiaocn:~ liumiao$

详细参看:

验证方法2: 使用ldapsearch等命令

考虑到权限,只查询自己的信息,看看是否能够正确返回,主要是用于验证-w的内容

liumiaocn:~ liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "cn=Barbara Jensen,dc=example,dc=org" -D "cn=Barbara Jensen,dc=example,dc=org" -w VSzhfbwA "uid=bjensen"
# extended LDIF
#
# LDAPv3
# base <cn=Barbara Jensen,dc=example,dc=org> with scope subtree
# filter: uid=bjensen
# requesting: ALL
#

# Barbara Jensen, example.org
dn: cn=Barbara Jensen,dc=example,dc=org
objectClass: inetOrgPerson
cn: Barbara Jensen
cn: Babs Jensen
sn: Jensen
title: the world's most famous mythical manager
mail: bjensen@example.com
uid: bjensen
userPassword:: e1NTSEF9ZDYwU1NNMjJxb05vOTZ6OHg4b1JVMmxuRmpKNmR2SjE=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
liumiaocn:~ liumiao$

因为错误的时候必然会提示:

liumiaocn:~ liumiao$ ldapsearch -x -h 192.168.31.242 -p 389 -b "cn=Barbara Jensen,dc=example,dc=org" -D "cn=Barbara Jensen,dc=example,dc=org" -w VSzhfbwA1 "uid=bjensen"
ldap_bind: Invalid credentials (49)
liumiaocn:~ liumiao$

所以以此类推,很多命令和Option都可以进行利用,比如-n,各种扩展方式可自行展开。

ldappasswd使用-s指定修改密码

前文不指定密码的方式实际是使用admin对其他用户的密码进行重设,用户自己知道密码的情况下,进行更新则可以使用这种方式,比如:

liumiaocn:openldap liumiao$ ldappasswd -x -h 192.168.31.242 -p 389 -D "cn=Barbara Jensen,dc=example,dc=org" -w VSzhfbwA -s liumiao123
liumiaocn:openldap liumiao$ echo $?
0
liumiaocn:openldap liumiao$

这样Barbara就将自己的密码改成了liumiao123,结果确认发现,密码能够正常使用

liumiaocn:~ liumiao$ java LdapDemo 192.168.31.242 "cn=Barbara Jensen,dc=example,dc=org" "liumiao123"
IPAdress: 192.168.31.242
Username: cn=Barbara Jensen,dc=example,dc=org
Password: liumiao123
env setting
login verification begins...
login successfully.
liumiaocn:~ liumiao$ 

结合这两种方式,常见的密码重设问题基本都可以解决,比如在不知道密码的情况下,可以使用方式1先通过admin进行重新生成密码,再使用方式2重新设定指定密码,当然ldappasswd还有很多其他有用Option,使用方式可自行探索。

方式3: 使用ldapmodify来进行密码修改

ldapmodify作为一个万能命令,除了查询无法实现之外,增删改方面有广泛的应用,对于密码修改自然也非常方便,其实使用前文介绍的方法就可以,这里再次示例如下:

  • 准备修改密码的ldif文件,在文件中设定密码为babspw
liumiaocn:openldap liumiao$ cat modifybarbara.ldif 
dn: cn=Barbara Jensen,dc=example,dc=org
changetype: modify
replace: userPassword
userPassword: babspw
liumiaocn:openldap liumiao$
  • 使用ldapmodify修改密码
liumiaocn:openldap liumiao$ ldapmodify -a -H ldap://192.168.31.242:389 -D "cn=admin,dc=example,dc=org" -w admin -f modifybarbara.ldif 
modifying entry "cn=Barbara Jensen,dc=example,dc=org"

liumiaocn:openldap liumiao$ 
  • 结果确认
liumiaocn:~ liumiao$ java LdapDemo 192.168.31.242 "cn=Barbara Jensen,dc=example,dc=org" "babspw"
IPAdress: 192.168.31.242
Username: cn=Barbara Jensen,dc=example,dc=org
Password: babspw
env setting
login verification begins...
login successfully.
liumiaocn:~ liumiao$ 
淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
因为现在统一用LDAP 做身份统一认证管理,所以现在想做到每个用户能自己自行的修改密码, 在baidu,google很多,可是解决这个根本的原因我查了又查,可是还是有点小问题。 问题贴出来了,求解决啊。 安装的步骤: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 安装 Self service password @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Note: http://ltb-project.org/wiki/download self service password download page CentOS下php安装mcrypt扩展: vim /etc/yum.repos.d/CentOS-Base.repo add line: [php-mcrypt] baseurl=http://mirrors.sohu.com/fedora-epel/6/x86_64/ enabled=1 gpgcheck=0 yum clean all 1、确认你的linux没有安装mcrypt库,如果已安装,跳过安装步骤 yum list installed|grep mcrypt yum install libmcrypt libmcrypt-devel mcrypt mhash (2)、安装php的mcrypt扩展(动态加载编译) 执行phpize命令(phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块,如果没有?yum install php-devel里包含了,或者其他方法) whereis phpize whereis php-config yum install php-mcrypt yum install php-devel 顺便检查下/usr/lib64/php/modules/里的mrcypt.so扩展是否已经创建成功 然后的事就简单了,给你的php.ini添加一条extension=mcrypt.so find / -type f -name '*mcrypt.so*' /usr/lib64/php/modules/mcrypt.so [root@company-backup01 ~]# ls -lh /usr/lib64/php/modules/mcrypt.so -rwxr-xr-x. 1 root root 46K 11月 26 2013 /usr/lib64/php/modules/mcrypt.so vim /etc/php.ini add line: extension=mcrypt.so whereis phpize whereis php-config php -m 进行检测扩展是否安装成功 (3) 、重启apache,查阅phpinfo,mcrypt模块扩展是不是加载了? service httpd restart vim /var/www/html/index.php <?php phpinfo(); ?> wget http://tools.ltb-project.org/att ... password-0.8.tar.gz cp ltb-project-self-service-password-0.8.tar.gz /var/www/html/ cd /var/www/html/ tar zxvf ltb-project-self-service-password-0.8.tar.gz mv ltb-project-self-service-password-0.8 ldap vim /var/www/html/ldap/conf/config.inc.php $ldap_url = "ldap://127.0.0.1:389"; $ldap_binddn = "cn=root,dc=test,dc=com"; $ldap_bindpw = "123456"; $ldap_base = "dc=test,dc=com"; $ldap_filter = "(&(objectClass=account)(uid={login}))"; $ad_mode = false; $samba_mode = true; $who_change_password = "manager"; // 之前是该项填写错误了! 这里我写admin 我从其他文档按这个步骤来的,可是还是出现了问题。 问题如下: ![图片说明](https://img-ask.csdn.net/upload/201512/16/1450235794_123896.jpg) 我的web修改页面说我LDAP认证过去修改密码拒绝。 我查看日志报错这个 属性问题 可是我查看了代码没有问题 代码贴出来了。 ![图片说明](https://img-ask.csdn.net/upload/201512/16/1450235840_584486.jpg) 麻烦帮忙解决下。 还有我从新搭建了LDAP认证,也出现了数据库拒绝写入。
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页