我正在尝试创build一个web应用程序,以允许用户使用LDAP(s)在Samba4(也许也在AD)中更改自己的密码。 但是当我尝试使用此代码修改用户密码时:
dn: ........ changetype: modify replace: unicodePwd unicodePwd: "Temporal2"
我得到这个错误:
0x32 (Insufficient access; error in module acl: insufficient access rights during LDB_MODIFY (50))
如果我更改了代码,请删除旧密码,然后添加新密码:
dn: ........ changetype: modify delete: unicodePwd unicodePwd: "Temporal1" - add: unicodePwd unicodePwd: "Temporal2"
然后我得到这个错误:
#!ERROR [LDAP: error code 53 - 00002035: setup_io: it's not allowed to set the NT hash password directly']
ldapmodify使用自我用户凭据执行,我不想使用pipe理员帐户。 这可能吗? 我必须在Samba4中更改一些设置吗?
“unicodePwd”字段或属性只能包含unicodeforms下的密码并使用base64编码:
设置密码:MyNewPassw0rd编码这个密码将其推入“unicodePwd”属性是这样做的:
echo -n'“MyNewPassw0rd”'| iconv -f utf8 -t utf16le | base64 -w 0
注意围绕双引号的简单引号:简单引号在这里用于双引号不被shell解释。 进入unicodePwd的string必须包含密码和双引号。
这个命令给我们:
IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA
解码该值:
回声IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA | base64 -d
这个命令给我们:
“MyNewPassw0rd”
适用于你的例子:
回声“”Temporal2“”| iconv -f utf8 -t utf16le | base64 -w 0 IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA
所以新的LDIF内容是:
dn:........ changetype:修改 删除:unicodePwd - 添加:unicodePwd unicodePwd :: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA
注意unicodePwd后的双重双点:这意味着数据是base64编码的。
通过ldapmodify使用LDIF现在可以在这里修改任何用户密码,当ldapmodify运行时,使用我们委派的修改所有用户的权限的特定用户的身份。
只要我尝试使用“replace:unicodePwd”,如下面的LDIF,我收到一个关于权限不足的错误。
dn:........ changetype:修改 replace:unicodePwd unicodePwd :: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA
使用两个操作(“删除:unicodePwd”,然后“添加:unicodePwd”)不足的权利问题消失。 谢谢 : )
干杯,
马蒂亚斯