Ldap(Lightweight Directory Access Protocal)在当今的企业中应用非常广泛,他可以方便的用来存储公司的员工的信息和组织架构信息。在我们测试领域,也同样需要用Ldap来做基本的身份认证,比如我们常用的Devops链中的任务管理Jira、知识库管理Confuence、代码管理Gitlab、持续集成Jenkins、代码扫描Sonarqube等,都可以通过接入ldap实现用户的统一管理。今天我们先来说一下OpenLdap在Ubuntu上的安装和使用。
服务端安装
使用如下的命令在Ubuntu上安装:
apt install slapd ldap-utils
安装的过程中会提示输入管理员的密码,我们输入test123并在第二个界面再次输入确认:
如此便实现了在Ubuntu上的安装,非常方便。
接下来我们配置默认的Directory Information Tree(DIT)后缀。使用如下命令:
dpkg-reconfigure slapd
首先询问我们是否略过OpenLdap服务器的配置,我们选否:
在第二页中输入testexpert.com,如此将创建dc=testexpert,dc=com的baseDN:
接着输入baseDN中的机构名称,我们输入testexpert:
下来输入我们在安装过程中设定的管理员密码test123:
选择后台存储数据的数据库类型,默认支持的有BDB、MDB和HDB,我们直接选择默认的MDB即可。根据提示我们可以看到,HDB和MDB使用类似的存储格式,只是HDB额外增加了对子树命名的支持。MDB采用了一种新的存储格式,而且所需要的配置比BDB和HDB少,所以推荐使用MDB。
接下来一步询问当openldap卸载的时候,数据库是否同步删掉,这个我们根据自己的需要进行选择好了,一般安全起见,我们可以选择否:
询问是否删除旧的ldap安装,我们选择是:
如此,设置成功:)
开启memberOf
简单说下memberOf的作用。举例来说,我们在测试部门有个员工叫张三,那么换个角度看,就是张三是测试部门的一个员工,换成ldap的描述就是,测试部门这个group有一个member叫张三,张三有一个属性memberOf,值为测试部分。当张三离职或者转岗时,测试部门这个group会把张三移除掉,于是,自动的,张三的memberOf值为测试部门,会自动删掉。有这个东西的好处在于,我们在查一个人是哪个部门的时候,不用遍历group,非常方便。
首先我们查看memberOf是否已经开启:
slapcat -n 0 | grep olcModuleLoad
得到如下的结果:
说明没有。然后我们创建b.ldif,内容如下:
dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: memberof.la
然后使用如下命令执行:
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f b.ldif
创建c.ldif,内容如下:
dn: olcOverlay=memberof,olcDatabase={1}mdb,cn=config changetype: add objectClass: olcConfig objectClass: olcMemberOf objectClass: olcOverlayConfig objectClass: top olcOverlay: memberof olcMemberOfDangling: ignore olcMemberOfRefInt: TRUE olcMemberOfGroupOC: groupOfNames olcMemberOfMemberAD: member olcMemberOfMemberOfAD: memberOf
执行如下命令:
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f c.ldif
创建d.ldif,内容如下:
dn: cn=module{0},cn=config add: olcmoduleload olcmoduleload: refint
执行如下命令:
ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f d.ldif
创建e.ldif,内容如下:
dn: olcOverlay=refint,olcDatabase={1}mdb,cn=config objectClass: olcConfig objectClass: olcOverlayConfig objectClass: olcRefintConfig objectClass: top olcOverlay: refint olcRefintAttribute: memberof member manager owner
执行如下命令:
ldapadd -Q -Y EXTERNAL -H ldapi:/// -f e.ldif
然后再次查询确认memberOf已经开启:
客户端连接
下面我们使用ldap客户端连接上OpenLdap服务器进行组织架构的设置。这里,我用的是ApacheDirectoryStudio:https://directory.apache.org/studio/,一款Eclipse RCP应用,支持windows、linux和mac,比较好用。
启动后,创建一个新的链接:
输入连接名称和ip地址:
接下来输入认证信息:
认证方式使用默认的简单认证(Simple Authentication),bind dn那里,写入cn=admin,dc=testexpert,dc=com,除掉cn=admin,后面的配置需要与上面步骤的配置一致;bind password即为test123。输入完成之后,可以点击“Check Authentication”进行检查。
后面几步选择默认即可,最终,在Directory Studio中显示了dc=testexpert,dc=com的目录树:
组织架构建立
接下来我们在Directory Studio中建立组织架构:
在dc=testexpert,dc=com上邮件,选择New - New entry:
从新创建一个节点:
object class这里我们选择groupOfNames,表明创建一个组:
接下来,dn的rdn里面设置为ou=Groups:
因为现在没有member,所以直接点击finish创建完成。
重复上面的步骤,我们在cn=Groups下创建两个groups,ou=测试,ou=开发;在dc=testexpert,dc=com下在创建一个group,ou=People,最终结果如下:
至此,group创建完成。下面我们来创建person。创建person的步骤与group类似,只是在object class那里,我们选择inetOrgPerson:
重复此步骤,我们创建zhangsan和lisi两个账号,此时,组织架构如下:
如果我们需要给用户增加额外的信息,比如一般都有密码,我们选择用户之后,点击New attribute:
然后选择userPassword:
最后输入密码即可。
接下来,我们把zhangsan加入到“开发”组,lisi加入到“测试”组,点击图示位置即可弹出添加对话框,选择对应人员即可:
验证
使用如下命令的在OpenLdap服务器上查询:
ldapsearch -x -LLL -H ldap:/// -b cn=zhangsan,ou=People,dc=testexpert,dc=com dn memberOf
得到如下的结果:
因为我们的组有中文,所以这里用base64加密了,解密即可看到正确内容:
总结
OpenLdap的安装和使用,为我们统一的DevOPS工具链奠定了身份认证基础,后续文章我们将逐步介绍各个工具接入和使用OpenLdap的步骤。
本文暂时没有评论,来添加一个吧(●'◡'●)