Linux

為什麼我由 bash 腳本創建的 samba 域使用者的行為與手動創建的不同?

  • December 5, 2014

我有一個使用 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

檢查手冊頁smbldap-useradd,聽起來您需要-B 0在腳本中進行設置。據此它將清除帳戶上的“使用者必須更改密碼”標誌。

您可能需要查看您的 smb.conf 以確保您沒有任何意外smbldap-useradd設置。

引用自:https://serverfault.com/questions/604416