Openldap

學習 OpenLDAP,遵循“舊”教程——需要更新 hdb 與 mdb,調整前進的步驟

  • May 13, 2021

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.

引用自:https://serverfault.com/questions/1063295