OpenLDAP添加自定义objectClass实现添加自定义属性

最近使用到OpenLDAP,需要集成进系统。但是OpenLDAP本身的模板中,能用的属性太少了,无法满足正常的业务需求,因此需要对条目的属性进行扩展。

确定的思路是新增自定义的objectClass,条目的objectClass添加该objectClass之后就可以合法添加自定义属性了(支持PhpLdapAdmin和ApacheDirectoryStudio等可视化工具)

但是能找到的相关的内容比较少,查到的比较多的也是直接添加schema然后在slapd.conf中引入。在服务器上试了一下(OpenLDAP版本号:2.4.44),没起作用。所以去stackoverflow上取了取经。

参考来源:https://stackoverflow.com/questions/45511696/creating-a-new-objectclass-and-attribute-in-openldap?r=SearchResults

 

1:服务器任意目录创建新的schema文件,例如test.schema。

文件中的objectclass需要修改name,且必须确保每个项的oid全局唯一(oid的命名都有规律可循,但是我不知道的时候都是瞎编的- - )。

 

attributetype ( 1.3.6.1.4.1.42.2.27.4.1.98
        NAME 'userCertNo'
        DESC 'userCertNo'
        EQUALITY caseExactMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
        SINGLE-VALUE )

attributetype ( 1.3.6.1.4.1.42.2.27.4.1.97
        NAME 'userCertCN'
        DESC 'userCertCN'
        EQUALITY caseExactMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
        SINGLE-VALUE )


objectclass ( 1.3.6.1.4.1.42.2.27.4.2.88
        NAME 'financeUser'
        DESC 'financeUser'
        SUP top
        AUXILIARY
        MAY ( cn $ userCertNo $ userCertCN ) )

 

 

2:创建编译用的配置文件,例如test.conf。其中只需要包含自己创建的schema即可

include /etc/openldap/test/test.schema

 

3:以上两个文件放在同级目录下(也可以不放一起,编译时指定即可),随后创建目录testdir用于存放编译后的文件。

 

 

 然后执行slaptest命令编译自定义的schema,生成ldif等文件

slaptest -f test.conf -F testdir

 

4:进入testdir目录下的cn=config/cn=schema目录下可以看到生成的一个ldif文件。此时重命名该文件,并修改其中的cn和dn。(ldif文件中对空格等元素有严格要求,请不要额外添加空格等其他不必要的元素)

图中标黄的内容表明的是你要创建的objectClass的类名。

 

 

5:文件名修改完成后在该目录下执行slapadd命令,将该文件添加进OpenLdap库

slapadd -l ebankUser.ldif -n 0

如下图所示即为成功,需要注意是否有提示属性重复或者oid重复,如果提示报错需要修改schema后再次编译。

较为常见的错误是提示你属性重复或者oid重复,此时最好重新修改schema文件然后再次编译。

 

 

6:以上步骤完成后可以在/etc/openldap/slapd.d/cn=config/cn=schema路径下看到自己新添加的objectclass对应的ldif文件了。

 

 

 

 

 7:文件赋权并重启ldap服务。

直接重启服务会报错,需要给/etc/openldap/slapd.d/cn=config/cn=schema赋权或直接修改文件所有者为ldap,否则用户ldap无法读取。

chmod -R 777 cn=schema

然后重启服务

Service slapd restart

 

8:通过可视化管理界面phpldapadmin或者ApacheDirectoryStudio连接,然后在已有的用户上新增objectClass,选择自定义添加的class即可。随后便可以手动添加自定义的属性值了。

 

 

 

 

posted @ 2020-01-04 18:24  快乐肥宅  阅读(6250)  评论(3编辑  收藏  举报