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

openssl passwd -1

1 ответ1

6

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .