至于LDAP服务是什么东东,这里就不再废话了,来看这个文章的肯定是了解过,有这个需求和兴趣才来的。
我自己花了大概2周的业余时间,可能有20-30个小时的净学习时长吧,看了众多的教程、经验,最后按照下列这几篇文章完成了服务器搭建,建立与删除用户和组,导入Linux系统账户,更改RootDN,安装phpldapAdmin,等常用的功能。下面是相关文章的连接和标题,以及我自己做的一些安装过程记录等。在此分享给大家。
最佳基本的当然是官网: https://www.openldap.org/ 实际上官网说明里面的安装方法,真正无法正确安装。 反正我是操作没成功!!
1.《我花了一个五一终于搞懂了 OpenLDAP 》 http://www.sohu.com/a/284300312_283613
我对 SegmentFault 大神的这个文章进行了总结,在下面,有需要的可以看一下
下面的都是英文的,还有待翻译。但是能配置服务器的,应该都会基本的英文,按照图文介绍,一步一步确实能配置下来
2.《一步一步地在CentOS7上安装和设置LDAP服务器》
https://www.itzgeek.com/how-tos/linux/centos-how-tos/step-step-openldap-server-configuration-centos-7-rhel-7.html
3.《在CentOS 7上安装和配置phpLDAPAdmin这一图形化的管理工具》
https://www.itzgeek.com/how-tos/linux/centos-how-tos/install-configure-phpldapadmin-centos-7-ubuntu-16-04.html
4.《如何将linux系统的本地用户迁移到LDAP帐户》
https://www.itzgeek.com/how-tos/linux/centos-how-tos/migrate-local-users-ldap-accounts.html
5.《如何配置OpenLDAP并执行管理LDAP任务》----比较详细地介绍了LDAP的配置项和管理工具、命令的用法
https://www.digitalocean.com/community/tutorials/how-to-configure-openldap-and-perform-administrative-ldap-tasks
6.《如何在OpenLDAP服务器上更改帐户密码》 对普通用户和管理员账户的密码的更改
https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server
《我花了一个五一终于搞懂了 OpenLDAP 》正文的总结:
整个 OpenLDAP的架构大致包含 3个部分,OpenLDAP、phpLDAPadmin、PWM。
首先,是 OpenLDAP的服务器本身,相当于一个 mysql数据库。
phpLDAPadmin,是一个图形化管理界面。
PWM ,这是给用户提供一个修改密码所用的客户端。
大致的结构图:
一、安装所需软件
命令:# yum install openldap openldap-clients openldap-servers
启动slapd进程,并设置为开机自启动
命令:
# systemctl start slapd
# systemctl enable slapd
# systemctl status slapd
二、配置OpenLDAP
此前LDAP可以通过配置 slapd.conf这个文档完成,新版的 OpenLDAP已经将其抛弃!取而代之的是 名为slapd.d 整个配置 文件夹。
配置 OpenLDAP需要通过 ldapmodify命令执行一系列自己编写的 “XXX.ldif”格式的配置文件,而不要修改任何OpenLDAP自行安装的配置文件。
例如,修改RootDN,可以创建一个 changerootdn.ldif 的文件,文件内容类似下方:
dn: olcDatabase={2}bdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=qiban,dc=com
replace: olcSuffix
olcSuffix: dc=qiban,dc=com
各行的解释:
1. dn 行,表示你要修改的内容,本例子中要修改 {2}bdb ; 不同的安装情况下可能有差别,需要自行查看比对
查看命令: # ls /etc/openldap/slapd.d/cn\=config/ 注: 也就是slapd.d 文件夹下,cn=config 文件夹下的内容
可能的结果如下,是一堆.ldif格式的文档:
cn=module{0}.ldif cn=schema/ cn=schema.ldif
olcDatabase={0}config.ldif
olcDatabase={-1}frontend.ldif
olcDatabase={1}monitor.ldif
olcDatabase={2}bdb/
olcDatabase={2}bdb.ldif
这个例子中要改的就是最后一行的这个文档内容
2. changetype: modify 这一行表示这是一个起到修改-配置作用的文档,
3. replace 行,类似mysql数据库的 update操作;若更改为add,则可看做mysql的 insert操作
4.olcRootDN 行,在这里代表整个 OpenLDAP系统的管理员用户名,由后面的 cn=admin,dc=qiban,dc=com,共同组成,类似email名称。 cn=邮箱账号 dc=qiban,dc=com 类似@符号后面的域名。
注! 需要给这个管理员用户设置密码,具体做法需要搜索,这里没有给出配置示例
可以参考: 《如何在OpenLDAP服务器上更改帐户密码》
https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server
《如何配置OpenLDAP并执行管理LDAP任务》
https://www.digitalocean.com/community/tutorials/how-to-configure-openldap-and-perform-administrative-ldap-tasks
编写完成后还需要 运行命令,将给文档的配置内容导入LDAP
命令: # ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f changerootdn.ldif
三、添加memberOf模块
这个模块的作用是当你建一个组的时候,把一些用户添加到这个组里去,它会自动给这些用户添加一个 memberOf属性,有很多应用需要检查这个属性。
需要建 3个 .ldif文件,其中1个执行 ldapmodify命令 , 2个执行 ldapadd 命令,
1. memberof_config.ldif 文档,内容如下:
dn: cn=module,cn=config
cn: module
objectClass: olcModuleList
olcModuleLoad: memberof
olcModulePath: /usr/lib64/openldap
dn: olcOverlay={0}memberof,olcDatabase={2}bdb,cn=config
objectClass: olcConfig
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
注: 需要注意“olcModulePath”和“dn: olcOverlay” 这两行,需要先查看自己的模块目录是不是在 /usr/lib64下面,然后仔细比对数据库类型和数字,不能盲目复制!!!
该文档执行 ldapadd命令进行添加
命令:# ldapadd -Q -Y EXTERNAL -H ldapi:/// -f memberof_config.ldif
执行完之后,检查 /etc/openldap/slapd.d/cn=config/ 目录下是否多了一个模块,该新增模块的数字编号直接影响下一步操作。
2. refint1.ldif 文档,内容如下:
dn: cn=module{0},cn=config
add: olcmoduleload
olcmoduleload: refint
本示例中, memberOf是第一个模块,所以编号是 0,不同的安装条件下不一样,要看清楚到底第几号模块是 memberof。该文档需要执行 ldapmodify 命令:
命令:# ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f refint1.ldif
文档内容大意是说,要修改我们上一步刚添加的那个模块文件的内容。
3. refint2.ldif 文档,内容如下:
dn: olcOverlay={1}refint,olcDatabase={2}bdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner
同样需要注意检查 db类型的编号,否则可能配置失败。
该文档需要执行 ldapadd 命令:
命令: # ldapadd -Q -Y EXTERNAL -H ldapi:/// -f refint2.ldif
四、安装phpLDAPadmin 图文化管理工具 (需要安装nginx 和 php-fpm)
1. yum命令安装
命令:# yum install phpldapadmin
2. 配置phpLDAPadmin
本示例中采用的是nginx 软件,需要配置,使之支持phpLDAPadmin
配置内容如下:
location /htdocs {
alias /usr/share/phpldapadmin/htdocs;
index index.php;
location ~ .php$ {
alias /usr/share/phpldapadmin;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param _FILENAME $document_root$fastcgi__name;
include fastcgi_params;
}
}
默认状态下,管理配置文件安装在 /usr/share/phpldapadmin/htdocs下,必得要在这里配置一个 alias才能通过nginx使用web地址访问到它,但在 php-fpm时又要配置另外一个 alias,
下面配置php-fpm ,配置 /etc/phpldapadmin/config.php文档的下列配置项:
重启nginx和php-fpm服务,就可以通过 URL地址访问 phpLDAPadmin了。
登录的时候输入用户名: cn=admin,dc=qiban,dc=com,然后输入密码,如果你前面一切配置正确,即可进入管理界面
建档的账户和组的配置。
1. 首先要建立两个 organizationalUnit,分别是 groups和 users。
2.在 users下面建几个 inetOrgPerson,也就是实际的用户账号。
注意!在创建新条目时,一定要选择 默认,不要选择什么 Posix或者 GenericUserAccount,那只会创建出一些没用的 Linux账号出来。密码一定要选 md5,否则后面和其它系统连接会出现问题。
3.在 groups下面建几个组吧,比如 admins, users等。
注意! 选择 objectClass为 groupOfNames即可。
4.把你刚刚在第2步建好的用户分门别类的添加到对应的组里。
提示:在这一步上,如果前面配置 的memberOf模块正确的话,就会在 user的 显示内部属性里看到它的 memberOf 这条属性,如果看不到,说明没有配置对。
翻译:《如何更改LDAP服务器上的帐号的密码》
https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server
一、更改RootDN账户的密码
如果您忘记了LDAP管理密码,则需要在LDAP系统的服务器上具有root或sudo访问权限才能重置它。 登录到您的服务器以开始使用。
1.查找当前的RootDN信息
首先,您必须找到RootDN帐户和当前RootDN密码的哈希值。 这在特殊的cn = config配置DIT中可用。 我们可以通过输入以下命令来找到我们要查找的信息:
# ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
运行上述命令后,应该返回DIT的rootDN帐户和密码。 它还会告诉您配置数据库的位置。 我们也需要将此信息写入主目录中的文件,以便在获得新密码哈希后可以对其进行修改:
下面是显示出来的内容截图
2.哈希一个新密码
接下来,我们可以使用slappasswd程命令来哈希一个新密码。 我们想要使用我们查询的olcRootPW行中的相同的哈希数值,由带括号的前缀值表示。 在我们的例子中,就是{SSHA}。
使用slappasswd程序为我们要使用的密码生成正确的哈希。 我们将新哈希附加到我们使用last命令创建的文件的末尾。 如果您使用的是非root帐户,则需要指定命令的完整路径:
命令:
# /usr/sbin/slappasswd -h {SSHA} >> ~/newpasswd.ldif
系统将提示您输入并确认要使用的新密码。 散列值将附加到我们文件的末尾。
3.更改配置DIT中的密码
现在,我们可以编辑该文件以构造有效的LDIF命令来更改密码。 打开我们写过的文件:
# vi ~/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
修改完后保存并关闭,使用下面的命令进行更改:
命令:
# ldapmodify -H ldapi:// -Y EXTERNAL -f ~/newpasswd.ldif
这将更改cn = config DIT中的管理密码。 DIT=Directory Information Tree ? 文件目录树
更改正常/普通DIT中的密码
这已经更改了管理DIT中条目的密码。 但是,我们仍然需要修改常规DIT中的条目。 目前旧密码和新密码都有效。 我们可以通过使用新凭据修改常规DIT条目来解决此问题。
再次打开LDIF文件:
# vi ~/newpasswd.ldif
将dn:行中的值替换为您之前注释掉的RootDN值。 此条目是我们更改密码的新目标。
我们还需要使用userPassword更改两次出现的olcRootPW
这样我们就可以修改正确的值了。 完成后,LDIF文件应如下所示:
[output ~/newpasswd.ldif]
dn: cn=admin,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: {SSHA}lieJW/YlN5ps6Gn533tJuyY6iRtgSTQw
现在,我们可以使用我们在config DIT中设置的新密码通过绑定来修改该条目的密码。 您需要绑定到RootDN条目才能执行操作:
# ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W -f ~/newpasswd.ldif
系统将提示您输入在配置DIT中设置的新密码。 经过身份验证后,密码将被更改,只保留新密码以进行身份验证。
结论
LDAP通常用于存储帐户信息,因此了解如何正确管理密码非常重要。 大多数情况下,该过程相对简单,但对于更密集的操作,您仍然可以通过一些工作来修改密码。
2019-03-6 在神州笔记本上配置ldap服务器的信息记录
1.首先运行了更改rootDN密码中的查询命令,后使用slappasswd命令设置了密码123456789,并生成哈希值,截图记录
[root@Desktop cn=config]# ldapsearch -H ldapi:// -LLL -Q -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" dn olcRootDN olcRootPW | tee ~/newpasswd.ldif
运行后显示的内容如下
dn: olcDatabase={2}hdb,cn=config
olcRootDN: cn=Manager,dc=my-domain,dc=com
[root@Desktop cn=config]# slappasswd
New password: 123456789
Re-enter new password:123456789
生成的哈希值如下
{SSHA}sa3A0KIWrhMQB+l9eK/4hoEMMLHj9xqN