/etc/shadow – HowTo: Generate Password Hash in Linux
Linux stores users’ encrypted passwords, as well as other security information, such as account or password expiration values, in the /etc/shadow file.
Someday you may need to edit the /etc/shadow file manually to set or change ones password.
Unlike the /etc/passwd that is readable for everyone, the /etc/shadow file MUST be readable by the ROOT user only.
For this you would have to generate password hash in the format compatible with /etc/shadow .
Cool Tip: Want to create a USER with ROOT privileges? This can be very dangerous! But if you insist… Read more →
There is no need to install any additional tools as it can be easily done from the Linux command line using Python.
Generate Password Hash for /etc/shadow
The $ID indicates the type of encryption, the $SALT is a random (up to 16 characters) string and $ENCRYPTED is a password’s hash.
Hash Type | ID | Hash Length |
---|---|---|
MD5 | $1 | 22 characters |
SHA-256 | $5 | 43 characters |
SHA-512 | $6 | 86 characters |
Cool Tip: Got a hash but don’t know what type is it? Find out how to easily identify different hash types! Read more →
Use the below commands from the Linux shell to generate hashed password for /etc/shadow with the random salt.
Generate MD5 password hash:
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MySecretPassword', '\$1\$%s\$' % randomsalt)" --- $1$YjOzcqrf$Zqx4sx5CQRuEIFCdOLAJV0
Generate SHA-256 password hash:
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MySecretPassword', '\$5\$%s\$' % randomsalt)" --- $5$LgsPuaeR$OCtm.3tpbS/wyOZAIy6dsVNP4x0GyohyGebkIz15e88
Generate SHA-512 password hash:
python -c "import random,string,crypt; randomsalt = ''.join(random.sample(string.ascii_letters,8)); print crypt.crypt('MySecretPassword', '\$6\$%s\$' % randomsalt)" --- $6$HMpFTkgb$WqzuqMqYbjWsXFrOtvZPo.1gIkH6HiXJGr4QPv.k26jE.3mE.sdf3dds[. ]
Hope these commands will be helpful.
Just don’t forget to replace MySecretPassword with YourSecretPassword.
As you can see, it is really very easy to generate hashes for the /etc/shadow from the Linux command line using Python.
Particularly for the reason that the Python is installed by default on the most Linux distributions.
Получить хеш пароля linux
Команда 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/
Аналогичным образом могут использоваться и иные алгоритмы генерации хэшей паролей.