以编程方式生成samba密码哈希


0

我想知道是否有一个标准的Linux / Ubuntu命令来生成SMB密码哈希 stdout。对于好奇的人,我想在多台机器上管理一组用户名和密码(使用Puppet),包括通过Samba访问(现在,不使用像LDAP这样的更通用的东西)。更具体地说,这个命令的等价物我用来生成Linux密码条目但是用于SMB / Samba:

openssl passwd -1

使用添加帐户不是更好 smbpasswd?实际上并不建议使用内部Samba数据存储。
grawity

我可以通过smbpasswd来做,但是我们需要在puppet repo中以明文形式使用密码。这有点不受欢迎。
Alex Wilson

Afaik,Samba商店 相同的MD4哈希 就像Windows一样。这个哈希是 密码当量 知道它允许以与知道密码相同的方式进行身份验证。这一点,以及MD4的漏洞,让你在回购中包含哈希的想法同样糟糕。
grawity

嗯。我知道samba密码哈希很弱。不知道那是不是很糟糕。尽管如此,我认为拥有哈希而不是明文对我们来说明显更好。
Alex Wilson

Answers:


6

在内部,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,因此最初认为盐是不必要的。)


一个良好而彻底的回复。谢谢。由于您的警告,我认为我们可能会重新审视ldap / kerberos作为替代的,更安全的身份验证/授权系统。
Alex Wilson

@Alex:LDAP / Kerberos是Unix网络的常用选择。但是,如果大多数客户端使用Windows,则Active Directory(使用Samba 4作为域控制器)可能比普通的旧OpenLDAP + krb5容易得多,特别是在对SMB共享进行身份验证时。
grawity
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.