openldap 代理授權
我在使用代理授權進行更新時遇到了一些麻煩。我正在使用 UnboundID 的 LDAP SDK 連接到 OpenLDAP,並為更新發送ProxiedAuthorizationV2RequestControl 。
dn: uid=me,dc=People,dc=example,dc=com
我已經測試並驗證了目標使用者有權執行該操作,但我得到訪問權限不足
當我嘗試通過代理身份驗證進行操作時。
我已經
olcAuthzPolicy=both
在原始使用者中cn=config
進行了配置。authzTo={0}ldap:///dc=people,dc=example,dc=com??subordinate?(objectClass=inetOrgPerson)
authzTo 似乎正在工作;當我改變它時,我得到無權冒充身份
當我嘗試更新時(也用於搜尋)。
我
ldapwhoami -U portal -Y DIGEST-MD5 -X u:mace -H ldap://yorktown -Z
現在可以在沒有 saslauthd 的情況下進行這項工作。我只需要將代理使用者(門戶)的密碼儲存為純文字。但是當我嘗試更新任何東西時,我仍然得到“訪問權限不足”。代理使用者
dn: uid=portal,ou=Special Accounts,dc=example,dc=com objectClass: inetOrgPerson cn: portal sn: portal uid: portal userPassword: test authzTo: {0}ldap:///dc=People,dc=example,dc=com??sub?(objectClass=inetOrgPerson)
有效使用者:
dn: employeeNumber=1400,dc=People,dc=example,dc=com objectClass: inetOrgPerson objectClass: posixAccount objectClass: sambaSamAccount objectClass: shadowAccount uid: mace ...
這是更新嘗試的日誌,嘗試添加
employeeNumber=1385
為member
.cn=Data Management
它似乎正確地查看了嵌套組,但它似乎應該在它到達 employeeNumber=1400 in 時表明匹配cn=administrators
。op tag 0x66, time 1299022001 conn=31595 op=2 do_modify conn=31595 op=2 do_modify: dn (cn=Data Management,dc=Roles,dc=example,dc=com) >>> dnPrettyNormal: <cn=Data Management,dc=Roles,dc=example,dc=com> <<< dnPrettyNormal: <cn=Data Management,dc=Roles,dc=example,dc=com>, <cn=data management,dc=roles,dc=example,dc=com> conn=31595 op=2 modifications: replace: member multiple values conn=31595 op=2 MOD dn="cn=Data Management,dc=Roles,dc=example,dc=com" conn=31595 op=2 MOD attr=member >>> dnPretty: <employeeNumber=1020,dc=People,dc=example,dc=com> <<< dnPretty: <employeeNumber=1020,dc=People,dc=example,dc=com> >>> dnPretty: <employeeNumber=1385,dc=People,dc=example,dc=com> <<< dnPretty: <employeeNumber=1385,dc=People,dc=example,dc=com> >>> dnNormalize: <employeeNumber=1020,dc=People,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1020,dc=people,dc=example,dc=com> >>> dnNormalize: <employeeNumber=1385,dc=People,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1385,dc=people,dc=example,dc=com> dnMatch -1 "employeeNumber=1020,dc=people,dc=example,dc=com" "employeeNumber=1385,dc=people,dc=example,dc=com" bdb_dn2entry("cn=data management,dc=roles,dc=example,dc=com") ==> unique_modify <cn=Data Management,dc=Roles,dc=example,dc=com> bdb_modify: cn=Data Management,dc=Roles,dc=example,dc=com bdb_dn2entry("cn=data management,dc=roles,dc=example,dc=com") bdb_modify_internal: 0x00000043: cn=Data Management,dc=Roles,dc=example,dc=com >>> dnNormalize: <cn=Administrators,ou=LDAP,dc=Applications,dc=example,dc=com> <<< dnNormalize: <cn=administrators,ou=ldap,dc=applications,dc=example,dc=com> => bdb_entry_get: ndn: "cn=administrators,ou=ldap,dc=applications,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("cn=administrators,ou=ldap,dc=applications,dc=example,dc=com") bdb_entry_get: rc=0 >>> dnNormalize: <cn=system administrators,dc=roles,dc=example,dc=com> <<< dnNormalize: <cn=system administrators,dc=roles,dc=example,dc=com> => bdb_entry_get: ndn: "cn=system administrators,dc=roles,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("cn=system administrators,dc=roles,dc=example,dc=com") bdb_entry_get: rc=0 >>> dnNormalize: <employeeNumber=1306,dc=people,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1306,dc=people,dc=example,dc=com> => bdb_entry_get: ndn: "employeeNumber=1306,dc=people,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("employeeNumber=1306,dc=people,dc=example,dc=com") bdb_entry_get: rc=16 >>> dnNormalize: <employeeNumber=1329,dc=people,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1329,dc=people,dc=example,dc=com> => bdb_entry_get: ndn: "employeeNumber=1329,dc=people,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("employeeNumber=1329,dc=people,dc=example,dc=com") bdb_entry_get: rc=16 >>> dnNormalize: <employeeNumber=1401,dc=people,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1401,dc=people,dc=example,dc=com> => bdb_entry_get: ndn: "employeeNumber=1401,dc=people,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("employeeNumber=1401,dc=people,dc=example,dc=com") bdb_entry_get: rc=16 >>> dnNormalize: <employeeNumber=1400,dc=people,dc=example,dc=com> <<< dnNormalize: <employeeNumber=1400,dc=people,dc=example,dc=com> => bdb_entry_get: ndn: "employeeNumber=1400,dc=people,dc=example,dc=com" => bdb_entry_get: oc: "(null)", at: "member" bdb_dn2entry("employeeNumber=1400,dc=people,dc=example,dc=com") bdb_entry_get: rc=16 bdb_modify: modify failed (50) send_ldap_result: conn=31595 op=2 p=3 send_ldap_result: err=50 matched="" text="" send_ldap_response: msgid=3 tag=103 err=50 conn=31595 op=2 RESULT tag=103 err=50 text=
大約一年前我經歷過,使用代理授權讓我發瘋。所以我可能沒有明確的答案,但也許我可以提供幫助。
首先:在 slapd 上增加你的日誌級別!它很冗長,但很有幫助。二:使用ldapwhoami測試代理授權。您可以使用 -X 選項指定目標使用者,並在 -U 中指定您的代理使用者。
# ldapwhoami -U proxyuser -Y DIGEST-MD5 -X u:targetuser -H ldap://localhost
您應該在配置中啟用兩個參數。olcAuthzPolicy (您擁有)和olcAuthzRegexp(用於建構 SASL 身份驗證字元串)**。**這是我的配置中的內容:
olcAuthzRegexp: "^uid=([^,]+).*,cn=[^,]*,cn=auth$" "ldap:///dc=example,dc=net??sub?(uid=$1)" olcAuthzPolicy: to
最後,正如您所說,您的 proxyuser 應該具有authzTo屬性。這是我的代理使用者之一的定義:
dn: cn=proxyuser,dc=example,dc=net uid: proxyuser mail: proxyuser@example.net sn: proxyuser cn: proxyuser objectClass: inetOrgPerson objectClass: top structuralObjectClass: inetOrgPerson authzTo: {0}ldap:///dc=example,dc=net??sub?(objectClass=inetOrgPerson) userPassword:: iodqwhdowihw0123hef92e=
現在這應該足以使代理授權工作(再一次,用 ldapwhoami 測試它)。我在我的 wiki 上寫了一個章節(SASL 和代理授權),因為我需要它從 cyrus-imapd 和 postfix 連接到 openldap。有關更多資訊,請查看:http ://wiki.linuxwall.info/doku.php/en:ressources:dossiers:openldap:openldap_debian#sasl