我想知道是否有一個標準的 Linux/Ubuntu 命令來產生 SMB 密碼雜湊stdout
。出於好奇,我想在多台機器上管理一組使用者名稱和密碼(使用 Puppet),包括透過 Samba 進行存取(目前不使用 LDAP 等更通用的東西)。更具體地說,我使用此命令的等效項來產生 Linux 密碼條目,但適用於 SMB/Samba:
openssl passwd -1
答案1
在內部,Samba 儲存相同的內容LM 和 NT 哈希值與 Windows 一樣,用於 NTLM 驗證。
NT 雜湊使用 MD4 演算法,應用於 UTF-16 Little Endian 編碼的密碼。可以使用普通工具來計算,例如:
#!/usr/bin/env perl use Digest::MD4 qw(md4_hex); use Encode qw(encode); chomp(my $pw = <STDIN>); print md4_hex(encode("UTF-16LE", $pw)), "\n";
或 OpenSSL:
printf '%s' "$pw" | iconv -t utf16le | openssl md4
LM 雜湊可以在幾秒鐘內被破解。沒有人再使用它了。不要使用它。現代 Windows 版本以及(希望)Samba 只儲存「空白」密碼的 LM 雜湊值,無論輸入為何。
但是,將雜湊值包含在腳本中這是一個非常糟糕的主意這並不比保留密碼本身好多少。如果想要取得原始密碼,未加鹽的MD4 雜湊值很容易被破解,即使沒有原始密碼,該雜湊值也是與密碼等效的– 任何擁有該雜湊值的人都可以執行NTLM 驗證,而無需密碼本身。 (Windows 不允許任何人(甚至管理員)直接存取 SAM,因此最初認為不需要加鹽。)