プログラムでSambaパスワードハッシュを生成する

プログラムでSambaパスワードハッシュを生成する

SMB パスワード ハッシュを生成するための標準的な Linux/Ubuntu コマンドがあるかどうか知りたいですstdout。興味がある方のために言うと、Samba 経由のアクセス (現時点では、LDAP のようなより一般的なものは使用していません) を含む、複数のマシン間でユーザー名とパスワードのセットを管理したいと考えています (Puppet を使用)。具体的には、Linux パスワード エントリを生成するために使用するこのコマンドと同等のコマンドを SMB/Samba 用に用意します。

openssl passwd -1

答え1

内部的にはSambaは同じLM ハッシュと NT ハッシュWindows と同様に、NTLM 認証に使用されます。

  • NT ハッシュは、UTF-16 リトルエンディアンエンコードのパスワードに適用される MD4 アルゴリズムを使用します。通常のツールを使用して計算できます。例:

    #!/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 に直接アクセスできないため、ソルトは当初不要であると考えられていました。)

関連情報