Ldap(轻量级目录访问协议)在如今的企业中应用非常广泛,可以方便的用来存储公司的员工信息、组织架构信息等。在我们测试领域,也需要用到Ldap来进行基本的身份认证。比如我们常用的Devops链中,任务管理Jira、知识库管理Confuence、代码管理Gitlab、持续集成Jenkins、代码扫描Sonarqube等,都可以对接ldap,实现统一的用户管理。今天就来聊聊Ubuntu上OpenLdap的安装和使用。
服务器安装
在 Ubuntu 上使用以下命令安装:
apt install slapd ldap-utils
安装过程中会提示输入管理员的密码,我们输入test123,在第二个界面再输入一次确认:
这使得在Ubuntu上安装成为可能,非常方便。
接下来我们配置默认的目录信息树(DIT)后缀。使用以下命令:
dpkg-reconfigure slapd
首先我们被询问是否跳过OpenLdap服务器的配置,我们选择否:
在第二页输入,这样就会创建dc=testexpert,dc=com的baseDN:
接下来在baseDN中输入组织名称,我们输入testexpert:
接下来输入我们在安装过程中设置的管理员密码test123:
选择后端数据存储的数据库类型,默认支持的有BDB、MDB、HDB,我们直接选择默认的MDB即可。根据提示可知HDB和MDB使用的存储格式差不多,但是HDB额外支持了子树命名。MDB使用了新的存储格式,需要的配置比BDB和HDB要少,所以建议使用MDB。
接下来会询问是否在卸载openldap时同步删除数据库,我们根据自己的需求选择,为了安全起见,可以选择no:
当询问是否删除旧的 ldap 安装时,我们选择是:
这样,设置成功了:)
启用 memberOfEnable memberOf
我先简单解释一下memberOf的作用。比如我们测试部门有个员工叫张三,从另一个角度看,张三是测试部门的员工。LDAP中的描述是,测试部门组里有个成员叫张三,张三有个属性memberOf,它的值为测试部门。当张三离职或者岗位变动时,测试部门组会把张三移除,那么张三的memberOf值就会自动被删除为测试部门。这个东西的好处就是,我们查一个人属于哪个部门的时候,不用去遍历组了,很方便。
首先我们检查 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:,一个Eclipse RCP应用程序,支持Windows、Linux和Mac,比较容易使用。
一旦开始,创建一个新链接:
输入连接名称和IP地址:
接下来输入身份验证信息:
认证使用默认的Simple Authentication,bind dn字段输入cn=admin,dc=testexpert,dc=com,除了cn=admin外,其他配置均与上述步骤一致,bind密码为test123,输入信息后点击Check Authentication进行检查。
接下来的几个步骤选择默认即可,最后在Directory Studio中显示出dc=testexpert,dc=com的目录树:
组织架构设立
接下来我们在 Directory Studio 中创建组织结构:
在 dc=testexpert,dc=com 中,选择新建 - 新条目:
创建新节点:
这里我们选择groupOfNames,也就是创建一个组:
接下来,在 dn 的 rdn 中设置 ou=Groups:
因为现在还没有成员,所以直接点击“完成”就可以完成创建了。
重复上述步骤,我们在 cn=Groups,ou=Test,ou=Development 下创建两个组;在 dc=testexpert,dc=com,ou=People 下创建另一个组。最终结果如下:
至此,组已创建完毕。现在让我们创建一个人。创建人的步骤与组的步骤类似,只是在对象类中,我们选择 inetOrgPerson:
重复此步骤,创建zhangsan、lisi两个账号,此时组织结构如下:
如果我们需要给用户添加额外的信息,比如密码,我们选择该用户并点击新建属性:
然后选择用户密码:
最后输入密码。
接下来我们把zhangsan添加到“Development”组,lisi添加到“Testing”组,点击图标弹出添加对话框,选择对应的人员:
核实
使用以下命令在OpenLdap服务器上查询:
ldapsearch -x -LLL -H ldap:/// -b cn=zhangsan,ou=People,dc=testexpert,dc=com dn memberOf
得到以下结果:
因为我们群里有中文,所以这里用base64加密了,解密之后就可以看到正确的内容了:
总结
OpenLdap的安装和使用为我们统一的DevOPS工具链奠定了身份认证的基础,在后续的文章中我们会逐步介绍各个工具访问和使用OpenLdap的步骤。