在OpenLDAP Proxy入門文章中,我們提到slapd.conf是設定檔,它告訴slapd服務該做什麼。除此之外,還有一種動態配置slapd的方法,其配置儲存在LDIF資料庫中。未來,LDIF資料庫將成為配置slapd的唯一方式,舊式的slapd.conf已不建議使用。可以使用slapdtest命令將slapd.conf轉換為LDIF格式。
slapdtest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
為方便說明,我們將使用slapd.conf來解釋如何將slapd服務配置為OpenLDAP Proxy。我們將在此解釋已配置meta後端的配置。ldap後端配置與meta後端配置類似,只有一些細微的差別。
以下是一個可運作的OpenLDAP Proxy配置範例。
# # 詳細配置選項,請參閱slapd.conf(5)。 # 此檔案不應允許世界可讀。 # # 包含綱要 include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema include /etc/openldap/schema/duaconf.schema include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema include /etc/openldap/schema/java.schema include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema include /etc/openldap/schema/openldap.schema include /etc/openldap/schema/ppolicy.schema include /etc/openldap/schema/collective.schema # 允許LDAPv2客戶端連線。這不是預設值。 allow bind_v2 pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # 載入動態後端模組 # - modulepath是依賴架構的值(32/64位元系統) # - back_sql.la覆蓋層需要openldap-server-sql套件 # - dyngroup.la和dynlist.la不能同時使用 modulepath /usr/lib/openldap modulepath /usr/lib64/openldap moduleload back_meta moduleload rwm # 接下來三行允許使用TLS來加密使用虛擬測試憑證的連線,您可以通過執行來生成。 TLSCACertificateFile /root/openldap_proxy/data/certs/ldap.crt TLSCertificateFile /root/openldap_proxy/data/certs/ldap.crt TLSCertificateKeyFile /root/openldap_proxy/data/certs/ldap.key # 記錄層級 loglevel 256 ####################################################################### # 資料庫定義 ####################################################################### #### 資料庫定義 ######################################### database meta suffix "dc=test,dc=com" rootdn "cn=admin,dc=test,dc=com" rootpw "password" uri "ldap://192.168.56.100/dc=test,dc=com" readonly yes lastmod off suffixmassage "dc=test,dc=com" "dc=ou1,dc=test,dc=com" uri "ldap://192.168.56.101/dc=test,dc=com" readonly yes lastmod off suffixmassage "dc=test,dc=com" "dc=ou2,dc=test,dc=com" idassert-bind bindmethod=simple binddn="cn=admin,dc=test,dc=com" credentials="password" mode=none flags=non-prescriptive idassert-authzFrom "dn.exact:cn=admin,dc=test,dc=com" overlay rwm rwm-map attribute uid sAMAccountName
這是一個標準的slapd.conf檔案,其中包含綱要的宣告和其他一般設定。我們只關注與Proxy相關的設定。
moduleload back_meta
這載入meta後端模組,以便可以使用meta後端。
database meta
這宣告LDAP伺服器的後端,在本例中為meta。也可以設定為ldap。
suffix "dc=test,dc=com"
這宣告LDAP客戶端可以用來搜尋LDAP Proxy的虛擬命名內容(基底)。它可以是任何符合基底語法的有意義的值。
rootdn "cn=admin,dc=test,dc=com"
rootpw "password"
這兩個項目宣告LDAP客戶端可以用來驗證LDAP Proxy的虛擬bind dn和密碼。當遠端LDAP伺服器需要客戶端bind時,這些很有用,因為我們需要告訴Proxy誰可以驗證到遠端LDAP伺服器。
uri "ldap://192.168.56.100/dc=test,dc=com"
這開始一個新的遠端LDAP伺服器項目。語法應為"://[:]/<vritual-naming-context/suffix>"。uri結尾的virtual-naming-context通常與database meta之後宣告的suffix相同。
每個新的遠端LDAP伺服器都應該使用單獨的uri。
suffixmassage "dc=test,dc=com" "dc=ou1,dc=test,dc=com"
這宣告Proxy中定義的suffix/base與遠端LDAP伺服器中真實base之間的映射,以便在客戶端查詢進來時,它可以將查詢重新導向到遠端LDAP伺服器真實的搜尋基底。左邊部分是virtual-naming-context,通常與database meta之後宣告的suffix相同。右邊部分是遠端LDAP伺服器中真實的搜尋基底。
這在ldap後端中不可用。
readonly yes
這宣告LDAP客戶端只能查詢遠端LDAP伺服器,但不能更新遠端LDAP伺服器。當使用LDAP伺服器作為Proxy時,這通常是我們會做的事情。
lastmod off
這也表示不能修改遠端伺服器。預設值為off,這將不允许修改。
idassert-bind bindmethod=simple
binddn="cn=admin,dc=test,dc=com"
credentials="password"
mode=none
flags=non-prescriptive
idassert-authzFrom "dn.exact:cn=admin,dc=test,dc=com"
當遠端LDAP伺服器需要客戶端驗證才能查詢伺服器時,這些是必要的。支援幾種bindmethod。一種是simple,它需要正常的dn和密碼進行驗證。binddn和憑證應由真實的LDAP伺服器提供。
此外,authzFrom宣告哪些本地識別可以訪問身份斷言功能。在本例中,我們定義了cn=admin,dc=test,dc=com可以訪問它。這是Proxy中定義的rootdn。
overlay rwm
rwm-map attribute uid sAMAccountName
這定義了Proxy伺服器向客戶端公開的屬性名稱與遠端LDAP伺服器提供的真實屬性名稱之間的映射。當不同的遠端LDAP伺服器可能有不同的屬性名稱但意思相同時,這很有用。例如,在Linux LDAP伺服器中,uid表示使用者ID,而在Windows AD中,相同的事物可能由sAMAccountName表示。或者當需要自定義屬性時,它們也很有用。
在下一篇文章中,我們將介紹如何使用slapd.conf設定LDAP Proxy。