OpenLDAP添加自定义objectClass实现添加自定义属性
最近使用到OpenLDAP,需要集成进系统。但是OpenLDAP本身的模板中,能用的属性太少了,无法满足正常的业务需求,因此需要对条目的属性进行扩展。
确定的思路是新增自定义的objectClass,条目的objectClass添加该objectClass之后就可以合法添加自定义属性了(支持PhpLdapAdmin和ApacheDirectoryStudio等可视化工具)
但是能找到的相关的内容比较少,查到的比较多的也是直接添加schema然后在slapd.conf中引入。在服务器上试了一下(OpenLDAP版本号:2.4.44),没起作用。所以去stackoverflow上取了取经。
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即可。随后便可以手动添加自定义的属性值了。