2017-08-03 92 views
0

我已經在Ubuntu 14.04上安裝了ldap 2.4.3。我配置了pwdPolicy覆蓋,當用戶更改他/她自己的密碼以及管理員更改密碼時,它將工作。問題是,當管理員更改密碼時,策略不被遵守。因此,我創建了另一個名爲usermanagement的帳戶,並將該dn添加到oclAccess。我可以修改使用usermanagement帳戶嘗試過的所有字段,但用戶密碼除外。ldap oclAccess似乎不適用於pwdPolicy

當運行ldappasswd我得到Insufficient access (50)

這是我的olcAccess:

olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by dn="cn=admin,dc=zed,dc=com" write by dn="cn=usermanagement,dc=zed,dc=com" write by anonymous auth by * none 
olcAccess: {1}to dn.base="" by * read 
olcAccess: {2}to * by self write by dn="cn=admin,dc=zed,dc=com" write by dn="cn=usermanagement,dc=zed,dc=com" write by * read 

編輯

我已經啓用調試,然後執行ldappasswd -H ldap://localhost -x -D "uid=luis,ou=users,dc=zed,dc=com" -W -S "uid=vixian,ou=users,dc=zed,dc=com"。日誌顯示:

983c0f8 bdb_dn2entry("cn=passworddefault,ou=policies,dc=zed,dc=com") 
5983c0f8 => bdb_entry_get: found entry: "cn=passworddefault,ou=policies,dc=zed,dc=com" 
5983c0f8 bdb_entry_get: rc=0 
5983c0f8 change password must use DELETE followed by ADD/REPLACE 
5983c0f8 send_ldap_result: conn=1004 op=1 p=3 
5983c0f8 send_ldap_result: err=50 matched="" text="Must supply old password to be changed as well as new one" 
5983c0f8 send_ldap_extended: err=50 oid= len=0 
5983c0f8 send_ldap_response: msgid=2 tag=120 err=50 

我又試圖使用ldapmodify可以刪除的userPassword,它是成功的,但更換或增加生產否認了相同的結果權限。

我已經更新了olcAccess以下@ejp建議:

olcAccess: {0}to attrs=userPassword,shadowLastChange 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=itinst,ou=groups,dc=zed,dc=com" write 
    by anonymous auth 
    by self write 
olcAccess: {1}to dn.base="" by * read 
olcAccess: {2}to * 
    by self write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=itinst,ou=groups,dc=zed,dc=com" write 
    by users read by anonymous search 

回答

1

的問題是,當管理員更改密碼的政策並沒有遵守。

managerDN更改密碼'不遵守政策'。你不應該使用任何東西managerDN這就是服務器運行的帳號,當然它可以做任何事情。您應該在DIT中定義一個單獨的admin帳戶,併爲其提供適當的訪問權限,正如我在以下示例中的整個ldap admins組中所述。

它與您的olcAccess沒有任何關係。查看文檔以瞭解如何正確執行此操作。我有:

olcAccess {0}to attrs=userPassword 
    by dn.base="cn=replicator,dc=verismart,dc=com,c=us" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=ldap admins,ou=groups,dc=verismartlabs,dc=com" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=applications,ou=groups,dc=verismartlabs,dc=com" write 
    by anonymous auth by self write 
olcAccess {1}to dn.base="" by * read 
olcAccess {2}to * 
    by self write 
    by dn.base="cn=replicator,dc=verismart,dc=com,c=us" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=ldap admins,ou=groups,dc=verismartlabs,dc=com" write 
    by group/groupOfUniqueNames/uniqueMember.exact="cn=applications,ou=groups,dc=verismartlabs,dc=com" write 
    by users read 
    by anonymous search 

編輯當你正在使用的ppolicy覆蓋:

  1. 您應該使用-e ppolicy參數ldappasswd,所以你可以看到,如果任何擴展響應。
  2. 用戶還必須使用-a選項至ldappasswd指定舊密碼,如日誌建議或-A以使其提示您。更改日誌說change password must use DELETE followed by ADD/REPLACE,這意味着你必須提供舊密碼和新密碼。 ldappasswd將爲舊值發送DELETE,爲新值發送ADD或REPLACE。
  3. 如何讓管理員在不知道舊密碼的情況下做到這一點是另一個問題,看起來......通過應用程序爲我工作,但我從來沒有通過ldappasswd完成。也許-e ppolicy也是這個答案。

EDIT 2這是因爲你在你的密碼策略有pwdSafeModify=TRUE。這種無用的設置使得管理員無法在不知道舊密碼的情況下重置密碼,並且如果知道舊密碼,則根本不需要管理員重置。我已將其關閉,但隨後所有密碼僅由Java代碼更改:一個用於用戶自己,另一個用於管理員,因此我可以自己執行pwdSafeModify

+0

我已經從olcAccesss中刪除了管理員;也許我的配置被格式化的缺乏所誤導,但匿名沒有被賦予寫入權限。我已經在DIT中添加了一個帳戶,但仍然無法訪問。 – Luis

+0

好吧,我誤讀了,解決了這個問題,並且看到了編輯。你能發佈你的密碼政策條目嗎?和'ppolicy'配置? – EJP