Gere hash de senha do samba programaticamente

Gere hash de senha do samba programaticamente

Eu queria saber se existe um comando padrão do Linux/Ubuntu para gerar hashes de senha SMB para arquivos stdout. Para os curiosos, quero gerenciar um conjunto de nomes de usuário e senhas em várias máquinas (usando Puppet), incluindo acesso via Samba (por enquanto, não usando algo mais geral como LDAP). Mais especificamente, um equivalente a este comando que uso para gerar entradas de senha do Linux, mas para SMB/Samba:

openssl passwd -1

Responder1

Internamente, o Samba armazena os mesmosHashes LM e NTcomo o Windows faz e que são usados ​​para autenticação NTLM.

  • O hash do NT utiliza o algoritmo MD4, aplicado à senha na codificação UTF-16 Little Endian. Você pode usar ferramentas comuns para calculá-lo, por exemplo:

    #!/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";
    

    ou OpenSSL:

    printf '%s' "$pw" | iconv -t utf16le | openssl md4
    
  • O hash LM pode ser quebrado em segundos. Ninguém usa mais. Não use isso. As versões modernas do Windows, assim como (espero) o Samba, armazenam apenas o hash LM de uma senha 'em branco', independentemente da entrada.

No entanto, incluir os hashes como parte dos seus scriptsé uma péssima ideia,não é muito melhor do que manter as próprias senhas. O hash MD4 sem sal é muito fácil de quebrar se alguém quiser obter a senha original e, mesmo sem isso, o hash é equivalente a uma senha – qualquer pessoa que tenha o hash pode realizar a autenticação NTLM sem precisar da própria senha. (O Windows não permite que ninguém, nem mesmo os administradores, acesse o SAM diretamente, então um salt foi inicialmente considerado desnecessário.)

informação relacionada