學習 OpenLDAP,遵循“舊”教程——需要更新 hdb 與 mdb,調整前進的步驟
http://www.rjsystems.nl/en/2100-d6-kerberos-openldap-provider.php
這個 2017 教程使用 hdb olcDatabase——現代安裝預設為 mdb。
我的步驟是:http ://www.rjsystems.nl/en/2100-d6-kerberos-openldap-provider.php#cncf
更改 2.1.1
# 2.1.1 dn: olcDatabase={1}hdb,cn=config changetype: modify delete: olcAccess olcAccess: {2}to * by self write by dn="cn=admin,dc=example,dc=com" write by * read
首先,我知道我使用的 OpenLDAP 版本預設為 mdb——但是,這個簡單的更改是不夠的。
我知道 dn: olcDatabase={1}hdb,cn=config 需要修改以獲得匹配。我認為當您沒有登錄到 OpenLDAP 機器本身時,這會刪除管理員權限。但是,我還不夠聰明,無法理解如何構造一個好的搜尋字元串,甚至將它拆開。我只是還沒有摸透它。
我確實學會瞭如何轉儲我的配置樹。
root@auth:~/ldap# slapcat -n 0 dn: cn=config objectClass: olcGlobal cn: config olcArgsFile: /var/run/slapd/slapd.args olcPidFile: /var/run/slapd/slapd.pid olcToolThreads: 1 structuralObjectClass: olcGlobal entryUUID: 4233e57c-461f-103b-823a-eddba7c2a4d6 creatorsName: cn=config createTimestamp: 20210510210556Z olcLogLevel: stats entryCSN: 20210510211216.057315Z#000000#000#000000 modifiersName: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth modifyTimestamp: 20210510211216Z dn: cn=module{0},cn=config objectClass: olcModuleList cn: module{0} olcModulePath: /usr/lib/ldap olcModuleLoad: {0}back_mdb structuralObjectClass: olcModuleList entryUUID: 42344030-461f-103b-8242-eddba7c2a4d6 creatorsName: cn=admin,cn=config createTimestamp: 20210510210556Z entryCSN: 20210510210556.957974Z#000000#000#000000 modifiersName: cn=admin,cn=config modifyTimestamp: 20210510210556Z ... dn: olcBackend={0}mdb,cn=config objectClass: olcBackendConfig olcBackend: {0}mdb structuralObjectClass: olcBackendConfig entryUUID: 423454b2-461f-103b-8243-eddba7c2a4d6 creatorsName: cn=admin,cn=config createTimestamp: 20210510210556Z entryCSN: 20210510210556.958497Z#000000#000#000000 modifiersName: cn=admin,cn=config modifyTimestamp: 20210510210556Z dn: olcDatabase={-1}frontend,cn=config objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern al,cn=auth manage by * break olcAccess: {1}to dn.exact="" by * read olcAccess: {2}to dn.base="cn=Subschema" by * read olcSizeLimit: 500 structuralObjectClass: olcDatabaseConfig entryUUID: 4233e996-461f-103b-823b-eddba7c2a4d6 creatorsName: cn=config createTimestamp: 20210510210556Z entryCSN: 20210510210556.955757Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20210510210556Z dn: olcDatabase={0}config,cn=config objectClass: olcDatabaseConfig olcDatabase: {0}config olcAccess: {0}to * by dn.exact=gidNumber=0+uidNumber=0,cn=peercred,cn=extern al,cn=auth manage by * break olcRootDN: cn=admin,cn=config structuralObjectClass: olcDatabaseConfig entryUUID: 4233ef9a-461f-103b-823c-eddba7c2a4d6 creatorsName: cn=config createTimestamp: 20210510210556Z entryCSN: 20210510210556.955910Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20210510210556Z dn: olcDatabase={1}mdb,cn=config objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDatabase: {1}mdb olcDbDirectory: /var/lib/ldap olcSuffix: dc=bradchesney,dc=net olcAccess: {0}to attrs=userPassword by self write by anonymous auth by * non e olcAccess: {1}to attrs=shadowLastChange by self write by * read olcAccess: {2}to * by * read olcLastMod: TRUE olcRootDN: cn=admin,dc=bradchesney,dc=net olcRootPW:: e1NTSEF9aGdrUVFacXpaMHBaTkVIYjVvalZwbEswQ1o5cWxsaXA= olcDbCheckpoint: 512 30 olcDbIndex: objectClass eq olcDbIndex: cn,uid eq olcDbIndex: uidNumber,gidNumber eq olcDbIndex: member,memberUid eq olcDbMaxSize: 1073741824 structuralObjectClass: olcMdbConfig entryUUID: 423457f0-461f-103b-8244-eddba7c2a4d6 creatorsName: cn=admin,cn=config createTimestamp: 20210510210556Z entryCSN: 20210510210556.958581Z#000000#000#000000 modifiersName: cn=admin,cn=config modifyTimestamp: 20210510210556Z
但是,現在呢?
我的猜測是我需要以某種方式連接到 olcDatabase——在我的 config.ldif slapcat 轉儲中存在幾次並刪除這些條目。我的解釋是,它就像 HTML 中的類——你結合搜尋類,直到你提煉到你想要的元素的不同子集。這可能是一個錯誤的觀點。
我的解釋是,它就像 HTML 中的類——你結合搜尋類,直到你提煉到你想要的元素的不同子集。這可能是一個錯誤的觀點。
這對於 ’ldapsearch’ 來說是正確的,在這裡你給它一個匹配某些屬性(通常包括 objectClass 作為第一個條件)的過濾器,它會吐出找到的條目。
但這對於“ldapmodify”是**不正確的。**修改或刪除條目時,始終指定要更新的*確切條目 DN;*在 LDIF 中就是這個
dn:
領域。這根本不是一個基於屬性的過濾器——一個條目的 DN 是它的唯一路徑,非常類似於文件系統路徑。(通常 LDAP 修改實際上是通過首先執行基於屬性的搜尋來確定條目 DN,然後根據其 DN 逐個修改每個條目。)
因此,當查看“ldapsearch”或“slapcat”輸出時,您只需將“dn:”的值顯示為每個結果的第一行。在您的情況下,描述主數據庫的條目是
olcDatabase={1}mdb,cn=config
.