프로그래밍 방식으로 삼바 비밀번호 해시 생성

프로그래밍 방식으로 삼바 비밀번호 해시 생성

.NET 파일에 SMB 비밀번호 해시를 생성하는 표준 Linux/Ubuntu 명령이 있는지 궁금합니다 stdout. 궁금한 점은 Samba를 통한 액세스(현재는 LDAP와 같은 일반적인 것을 사용하지 않음)를 포함하여 여러 컴퓨터(Puppet 사용)에서 일련의 사용자 이름과 비밀번호를 관리하고 싶습니다. 더 구체적으로 말하자면, SMB/Samba의 경우 Linux 비밀번호 항목을 생성하는 데 사용하는 다음 명령과 동일합니다.

openssl passwd -1

답변1

내부적으로 Samba는 동일한 정보를 저장합니다.LM 및 NT 해시Windows와 마찬가지로 NTLM 인증에 사용됩니다.

  • NT 해시는 UTF-16 Little Endian 인코딩의 비밀번호에 적용된 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에 직접 액세스하는 것을 허용하지 않으므로 처음에는 솔트가 불필요하다고 생각되었습니다.)

관련 정보