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即可。隨后便可以手動添加自定義的屬性值了。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM