6

我目前尝试通过 Linux 上的 LDAP 更改我们的 Active Directory Envoirenment 中的密码,因为有问题的用户无权访问 Windows 机器,我们希望保持这种状态。为了更改密码,我目前一直在弄清楚如何使用 ldapmodify 来做到这一点。在不同的网站/论坛/新闻组上大量阅读之后,我比以前更加困惑

但是:我尝试执行以下命令:

ldapmodify -f ldif.example -H ldaps://lab01-dc01.example.com -D 'CN=test,CN=users,DC=lab01,DC=example,DC=com' -x -W

ldif.example 的内容:

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com
changetype: modify
delete: unicodePwd
unicodePwd:: V3VQdXV1STEyLg==
-
add: unicodePwd
unicodePwd:: QmxhVVVraTEyLg==
-

(不用担心 - 这些密码不会在任何地方使用,也不是生产环境)

现在 - 每次我执行命令时都会收到以下错误:

modifying entry CN=test,CN=Users,DC=lab01,DC=example,DC=com"
ldapmodify: Constraint violation (19)
 additional info: 0000216C: AtrErr: DSID-03190EB0, #1:
 0: 0000216C: DSID-03190EB0, problem 1005 (CONSTRAINT_ATT_TYPE), data 0, Att 9005a (unicodePwd)

现在,在我阅读了这个错误的原因之后,要么是密码格式错误,要么是密码策略不允许我使用的密码。我检查了该政策 - 现在多次 - 并且新密码明确符合所有标准的政策。如果我使用 Windows 机器设置密码,它也可以正常工作(当然,我后来更改了“旧密码”和“新密码”,因为政策不允许我更改为较早的密码)。我在将“-W”选项传递给 ldapmodify 后输入的密码也绝对正确,否则 ldapmodify 吐出的错误是我使用了无效凭据而不是违反约束。所以 - 我能想到的唯一原因确实是格式错误的密码 - 但我可以'

有谁知道发生了什么?谁能把我推向正确的方向?

非常感谢您的帮助,我提前感谢您。

编辑:让我烦恼的事情:当我通过 base64 运行基本编码字符串时,它一直告诉我“输入无效”。现在 - 我继续使用 linux 机器上的 base64 重新编码密码 - 但是当我再次通过解码函数运行生成的字符串时,base64 一直告诉我“无效输入”......但是字符串稍微在 windows-base64 编码字符串和 linux 编码字符串之间更改。但是无论我在其中放什么,base64 都只会说“无效输入”。

Edit2:没关系 - 阅读我收集到的函数的目的,它会因为密码中的点和感叹号而引发此错误。

4

5 回答 5

3

供将来参考,如果有人遇到类似问题:简单的解决方案?只需使用 smbpasswd 而不是 ldap 来更改密码 - 完美无瑕!我真的很生气,我以前没有想到它:D

但是 - 使用 samba(使用 CentOS)在活动目录中更改密码的方法:

~#yum install samba
~#smbpasswd -r domaincontroller.example.com -U testuser1
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user testuser1 on domaincontroller.example.com

然后您就可以使用新密码登录了。就这么简单,真的。

于 2012-04-04T07:54:28.383 回答
3

设置密码时,需要 UTF-16LE 和 Base64 编码。在 Java 中,它可以通过以下方式完成:

String source = "\"car\"";
String utf16base64 = new String(Base64.getEncoder().encode(source.getBytes("UTF-16LE")));

必须使用UTF-16 LE,UTF-16 是不够的。

通过 LDAP 更改 'unicodePwd' 要求新密码是带双引号的 Unicode 字符串。这意味着当您要设置新密码(Password01!)时,将带双引号的密码(“Password01!”)转换为Base64。

可以使用在线工具 - http://www5.rptea.com/base64/(选择 UTF-16)。

那里有关于 unicodePwd 的详细信息 - https://technet.microsoft.com/en-us/magazine/ff848710.aspx

于 2016-01-03T15:41:55.067 回答
2

约束错误可能意味着您使用的旧密码不符合政策,例如,不能使用最后 24 个密码。供以后参考: 连接到 AD 服务器(绑定): 1. 作为管理员:您可以更改和重置每个人的密码。改变和重置是有区别的。Change = AD 将强制执行密码策略。重置 = 没有。2. 作为用户:您可以更改您的密码,但不允许重置密码。Change = AD 将强制执行密码策略。希望它有所帮助,虽然有点晚了!

于 2015-03-31T17:50:47.577 回答
1

从另一个用户那里获取一个现有的、有效的密码并尝试将其包含在您的 ldif 中呢?

这样您就可以确保您的密码有效。

其次,不要在 ldif 中使用删除/添加,而是使用替换。也许删除会导致对象类违规错误。

第三,如果属性包含不可打印或特殊字符,则只需要对属性进行 base64 编码。ldif 文件末尾有一个空行。

dn: CN=test,CN=Users,DC=lab01,DC=example,DC=com
changetype: modify
replace: unicodePwd
unicodePwd: BlaUUki12.

问候,

于 2012-04-04T07:04:44.290 回答
1

yum install samba对我不起作用,因为它从 samba 版本 3.6.9 安装了 smbpasswd 程序。

起作用的是yum install samba4-client。这将为 Samba 4 安装 smbpasswd 程序,并且此版本的 smbpasswd 实际上可以更改 Windows Server 2008 R2 域控制器上的密码。我使用了 samba4-client,因为我不需要 Samba 服务器,只需要它的客户端实用程序。

smbpasswd 命令的语法相同:

smbpasswd -r domaincontroller.example.com -U testuser1    

希望这可以帮助。

于 2013-07-23T14:49:56.187 回答