Программная генерация хэша пароля Samba

Программная генерация хэша пароля Samba

Мне было интересно, есть ли стандартная команда Linux/Ubuntu для генерации хэшей паролей SMB для stdout. Для любопытных, я хочу управлять набором имен пользователей и паролей на нескольких машинах (используя Puppet), включая доступ через Samba (пока что не используя что-то более общее, вроде LDAP). А точнее, эквивалент этой команды, которую я использую для генерации записей паролей Linux, но для SMB/Samba:

openssl passwd -1

решение1

Внутри Samba хранятся те же данныеХэши LM и NTкак в Windows, и которые используются для аутентификации NTLM.

  • Хэш NT использует алгоритм MD4, примененный к паролю в кодировке UTF-16 Little Endian. Для его вычисления можно использовать обычные инструменты, например:

    #!/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, поэтому изначально считалось, что соль не нужна.)

Связанный контент