Gerar hash de senha do samba programaticamente

0

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

openssl passwd -1
    
por Alex Wilson 06.02.2012 / 17:24

1 resposta

5

Internamente, o Samba armazena os mesmos LM e NT hashes como o Windows faz, e que são usados para autenticação NTLM.

  • O hash do NT usa 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 mais usa isso. Não use isso. Versões modernas do Windows, bem como (esperançosamente) o Samba, armazenam apenas o hash LM de uma senha 'em branco', independentemente da entrada.

No entanto, incluir os hashes como parte de seus scripts é uma idéia muito ruim, não muito melhor do que manter as próprias senhas. O hash MD4 sem sal é muito fácil de decifrar se alguém quiser obter a senha original e, mesmo sem isso, o hash é equivalente à senha - qualquer um que tenha o hash pode executar a autenticação NTLM sem precisar da própria senha. (O Windows não permite que ninguém, nem mesmo os administradores, acessem o SAM diretamente, portanto, um sal foi inicialmente considerado desnecessário.)

    
por 08.02.2012 / 17:23

Tags