Samba-Passwort-Hash programmgesteuert generieren

Samba-Passwort-Hash programmgesteuert generieren

Ich habe mich gefragt, ob es einen Standardbefehl für Linux/Ubuntu gibt, um SMB-Passwort-Hashes zu generieren stdout. Für alle, die neugierig sind: Ich möchte eine Reihe von Benutzernamen und Passwörtern auf mehreren Rechnern verwalten (mit Puppet), einschließlich des Zugriffs über Samba (vorerst ohne Verwendung eines allgemeineren wie LDAP). Genauer gesagt ein Äquivalent dieses Befehls, den ich zum Generieren von Linux-Passworteinträgen verwende, aber für SMB/Samba:

openssl passwd -1

Antwort1

Intern speichert Samba die gleichenLM- und NT-Hasheswie es Windows tut, und die für die NTLM-Authentifizierung verwendet werden.

  • Der NT-Hash verwendet den MD4-Algorithmus, der auf das Passwort in der UTF-16-Little-Endian-Kodierung angewendet wird. Sie können gewöhnliche Tools verwenden, um ihn zu berechnen, zum Beispiel:

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

    oder OpenSSL:

    printf '%s' "$pw" | iconv -t utf16le | openssl md4
    
  • Der LM-Hash kann in Sekunden geknackt werden. Niemand verwendet ihn mehr. Verwenden Sie ihn nicht. Moderne Windows-Versionen und (hoffentlich) Samba speichern unabhängig von der Eingabe nur den LM-Hash eines „leeren“ Passworts.

Wenn Sie die Hashes jedoch in Ihre Skripte einbinden,ist eine sehr schlechte Idee,nicht viel besser, als die Passwörter selbst zu behalten. Der ungesalzene MD4-Hash ist sehr leicht zu knacken, wenn man das Originalpasswort erhalten möchte, und selbst ohne dieses ist der Hash passwortäquivalent – ​​jeder, der den Hash hat, kann eine NTLM-Authentifizierung durchführen, ohne das Passwort selbst zu benötigen. (Windows erlaubt niemandem, nicht einmal den Administratoren, den direkten Zugriff auf den SAM, daher hielt man ein Salt zunächst für unnötig.)

verwandte Informationen