我有一个使用 LDAP 作为后端的 samba 服务器。只要我手动创建用户,PDC 就可以正常工作。这意味着,如果我使用以下命令创建新用户,我可以使用用户 bob 登录 Windows 计算机,并且不会要求我更改密码:
sudo smbldap-useradd -a -P bob
由于我无法访问用户的明文密码,因此我使用 ldif 文件来修改用户的 sambaNTPassword 属性。这是我能想到的唯一方法,因为我只提供了密码的 NTLM 哈希。尽管如此,密码还是成功更新了,我可以登录 Windows 计算机了。
问题在于:用户及其哈希摘要是批量提供给我的。它们首先被写入 postgresql 数据库。然后我必须运行一个脚本,从数据库中读取用户(新用户)列表及其 NTLM 摘要。由于这个过程应该是自动化的,我必须为此开发一个 bash 脚本。以下是运行上述命令的脚本的一部分:
#!/bin/bash
/usr/bin/expect <<EOD
spawn smbldap-useradd -a -P $username
expect "New password:" { send -- "$tot\n" }
expect "Retype new password:" { send -- "$toto\n" }
EOD
用户已成功创建,我可以用它登录 Windows 机器。问题是我收到以下消息:
您的密码今天到期。您想更改它吗?
有人知道区别在哪里吗?对我来说,这两种方法似乎相同。
我的服务器:Ubuntu 12.04 LTS Samba:3.6.3
以下是我手动创建用户 bob(手动输入密码)并更新其 sambaNTPasssword 属性时的 LDAP 条目:
$ ldapsearch -x uid=bob
# extended LDIF
#
# LDAPv3
# base <dc=mydomain,dc=com> (default) with scope subtree
# filter: uid=bob
# requesting: ALL
#
# bob, Users, mydomain.com
dn: uid=bob,ou=Users,dc=mydomain,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: sambaSamAccount
cn: bob
sn: bob
uid: bob
uidNumber: 1166
gidNumber: 513
homeDirectory: /home/bob
loginShell: /bin/bash
gecos: System User
givenName: bob
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: bob
sambaSID: S-1-5-21-343724861-3572058179-3643679278-3332
sambaLMPassword: B267DF22CB945E3EAAD3B435B51404EE
sambaAcctFlags: [U]
sambaPwdLastSet: 1402503403
sambaPwdMustChange: 1488903403
shadowLastChange: 16232
shadowMax: 1000
sambaNTPassword: FCFC9A2A1E3F4F9F5E1EBA9A4592507E
以下是我使用脚本创建用户 bob 的 LDAP 条目(在本例中我更新了 sambaNTPassword):
# bob, Users, mydomain.com
dn: uid=bob,ou=Users,dc=mydomain,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: inetOrgPerson
objectClass: sambaSamAccount
cn: bob
sn: bob
uid: bob
uidNumber: 1168
gidNumber: 513
homeDirectory: /home/bob
loginShell: /bin/bash
gecos: System User
givenName: bob
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
displayName: bob
sambaAcctFlags: [UX]
sambaSID: S-1-5-21-343724861-3572058179-3643679278-3336
sambaNTPassword: FCFC9A2A1E3F4F9F5E1EBA9A4592507E
答案1
检查手册页smbldap-useradd
,听起来你需要-B 0
在脚本中设置。根据对此,它将清除帐户上的“用户必须更改密码”标志。
您可能需要检查您的 smb.conf 以确保您没有任何意外的smbldap-useradd
设置。