我想知道是否有一个标准的 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,因此最初认为加盐是不必要的。)