允许使用 Samba4 的 LDAP 自行更改密码

允许使用 Samba4 的 LDAP 自行更改密码

我正在尝试创建一个 Web 应用程序,以允许用户使用 LDAP 在 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 使用自身用户凭据执行,我不想使用管理员帐户。这可能吗?我必须在 Samba4 中更改某些设置吗?

答案1

“unicodePwd”字段或属性只能包含unicode形式并用base64编码的密码:

要设置的密码:MyNewPassw0rd 对此密码进行编码以将其推送到“unicodePwd”属性中,具体操作如下:

echo -n'“MyNewPassw0rd”'|iconv-f utf8-t utf16le|base64-w 0

注意双引号周围的单引号:此处的单引号是因为双引号不会被 shell 解释。unicodePwd 中的字符串必须包含密码和双引号。

该命令为我们提供:

IgBNAHkATgBlAHcAUABhAHMAcwB3ADACgBkACIA

解码该值:

回声 IgBNAHkATgBlAHcAUABhAHMAcwB3ADAAcgBkACIA | base64-d

该命令为我们提供:

“我的新密码”

应用于你的例子:

echo -n'“Temporal2”'|iconv-f utf8-t utf16le|base64-w 0
IgBUAGUAbQBwAG8AcgBhAGwAMgAiAA==

因此新的 LDIF 内容是:

dn:......
变更类型:修改
删除:unicodePwd
-
添加:unicodePwd
unicode密码:: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA

注意unicodePwd后面的双双点:这表示数据是base64编码的。

当使用我们授予修改所有用户的权限的特定用户的身份运行 ldapmodify 时,现在可以通过 ldapmodify 使用 LDIF 来修改任何用户密码。

只要我尝试使用“replace:unicodePwd”(如以下 LDIF 中所示),我就会收到有关权限不足的错误。

dn:......
变更类型:修改
替换:unicodePwd
unicode密码:: IgBUAGUAbQBwAG8AcgBhAGwAMgAiAAoA

使用两个操作(“删除:unicodePwd”然后“添加:unicodePwd”)权限不足的问题消失了。谢谢 :)

干杯,

马蒂亚斯

相关内容