Команда mkpasswd

Команда mkpasswd позволяет задействовать одноименную утилиту, являющуюся надстройкой над функцией crypt() библиотеки glibc и предназначенную для генерации хэшей паролей. Утилита просто выводит хэши паролей, поэтому в случае необходимости генерации хэшей паролей пользователей системы с помощью нее администратору придется добавлять их в файл /etc/shadow самостоятельно. Разумеется, утилита поддерживает множество алгоритмов создания хэшей и может генерировать произвольные пароли в соответствии с критериями пользователя.

Примечание: утилита предустановлена в большинстве систем, тем не менее, важно знать о том, что в основанных на Debian дистрибутивах она распространяется в составе пакета ПО whois.

Базовый синтаксис команды выглядит следующим образом:

$ mkpasswd [параметры] пароль [значение-salt]

Команда может принимать пароль, значение salt, а также ряд параметров. Актуальными для обычного пользователя параметрами являются параметр -m, позволяющий выбрать алгоритм генерации хэша пароля и параметр -R, позволяющий задать число округлений.

Утилита поддерживает следующие алгоритмы генерации хэшей паролей:

Название Алгоритм
yescrypt Yescrypt
gost-yescrypt GOST Yescrypt
scrypt scrypt
bcrypt bcrypt
bcrypt-a Устаревшая версия bcrypt $2a$
sha512crypt SHA-512
sha256crypt SHA-256
sunmd5 SunMD5
md5crypt MD5
bsdicrypt Расширенный алгоритм BSDI на основе DES
descrypt Стандартный 56-битный алгоритм DES
nt NT-Hash

Наиболее безопасным и актуальным алгоритмом хэширования паролей на данный момент является алгоритм SHA-512. Этот же алгоритм используется в большинстве дистрибутивов для хэширования паролей пользователей. По умолчанию же утилита использует алгоритм Yescrypt, поэтому имеет смысл явно указывать нужный вам алгоритм.

Примеры использования

Генерация хэша пароля

Для генерации хэша пароля следует использовать утилиту mkpasswd без каких-либо параметров, кроме указания алгоритма:

$ mkpasswd -m sha512crypt
Пароль: 
$6$tQXin86./qTbzdG6$rG6tdRjWTBAbr4tEyyrMMTDfqH1Kin8fFkxlvq.NpSkFZe9n5.V4mre.epSSqKSIMo.HG4g3ZmTFArQQ3wd8k0

Пароль запрашивается в интерактивном режиме. Сам хэш расположен после второго разделителя ($). Таким образом, после первого разделителя выводится идентификатор алгоритма шифрования SHA-512 (6), а после второго — значение salt (tQXin86./qTbzdG6). Что касается значения salt, то оно генерируется случайным образом в том случае, если пользователь его явно не указал.

Для того, чтобы сгенерировать хэш пароля с заданным значением salt, достаточно передать это значение посредством параметра -S:

$ mkpasswd -m sha512crypt -S tQXin86./qTbzdG6
Пароль: 
$6$tQXin86./qTbzdG6$rG6tdRjWTBAbr4tEyyrMMTDfqH1Kin8fFkxlvq.NpSkFZe9n5.V4mre.epSSqKSIMo.HG4g3ZmTFArQQ3wd8k0

В данном случае был введен идентичный пароль, а из-за того, что значение salt было также идентичным, был сгенерирован идентичный хэш. Если снова сгенерировать хэш без задания значения salt, он будет отличаться из-за вновь сгенерированного значения salt:

$ mkpasswd -m sha512crypt
Пароль: 
$6$BB9i.6.wKiKgLqdH$wdSlPKWL8EtDtxGmk4VSi.4BWprfJFfzPWMCtynuAC4ok8Ut1XTUVdWSJZjzc4DaPQin5Sz7yLCqnbHcPnovd/

Аналогичным образом могут использоваться и иные алгоритмы генерации хэшей паролей.