Создать хэш пароля linux

How to create SHA512 password hashes on command line

In Linux I can create a SHA1 password hash using sha1pass mypassword . Is there a similar command line tool which lets me create sha512 hashes? Same question for Bcrypt and PBKDF2 .

There’s a sha512sum command that’s part of coreutils, and similarly openssl sha512 — but neither does the extra stuff that sha1pass does.

13 Answers 13

On any of the Red Hat distros such as Fedora, CentOS, or RHEL the command mkpasswd doesn’t include the same set of switches as the version typically included with Debian/Ubuntu.

NOTE: The command mkpasswd is actually part of the expect package, and should probably be avoided. You can find out what package it belongs to with either of these commands.

$ yum whatprovides "*/mkpasswd" -or- $ repoquery -q --file */mkpasswd 

Example

$ repoquery -q --file */mkpasswd expect-0:5.43.0-8.el5.x86_64 expect-0:5.43.0-8.el5.i386 

Both of these methods are superior to using rpm since the packages do not have to be installed to locate */mkpasswd .

Workarounds

To work around this you can use the following Python or Perl one-liners to generate SHA-512 passwords. Take note that these are salted:

Python (>= 3.3)

$ python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))' 
$ python -c 'import crypt; print(crypt.crypt("somesecret", crypt.mksalt(crypt.METHOD_SHA512)))' 

Python (2.x or 3.x)

$ python -c "import crypt, getpass, pwd; \ print(crypt.crypt('password', '\$6\$saltsalt\$'))" $6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/ 

Note: $6$ designates sha512. Support for this method of specifying the algorithm is dependent on support in OS level crypt(3) library function (usually in libcrypt). It is not dependent on python version.

Perl

$ perl -e 'print crypt("password","\$6\$saltsalt\$") . "\n"' $6$saltsalt$qFmFH.bQmmtXzyBY0s9v7Oicd2z4XSIecDzlB5KiA2/jctKu9YterLp8wwnSq.qc.eoxqOmSuNp2xS0ktL3nh/ 

In these examples the password is the string «password» and the salt is «saltsalt». Both examples are using $6$ which denotes that you want crypt to use SHA-512.

For the python one-liner, you can use crypt.mksalt(crypt.METHOD_SHA512) to generate the salt instead of using a fixed one.

Before typing a clear-text password at the command line make sure you have «ignorespace» set in HISTCONTROL (i.e., do this first on CentOS/RHEL: echo ‘export HISTCONTROL=»ignoredups:ignorespace»‘ > /etc/profile.d/histcontrol.sh && source /etc/profile.d/histcontrol.sh). Otherwise, it’ll get saved in your ~/.bash_history.

the perl (and presumably the python) use the system function «crypt». So they aren’t portable, they require a crypt function that understands the requested hash type. The OSX crypt doesn’t — it just gives me back an old-style DES-encrypted string.

Читайте также:  Linux for windows mobile phones

Yes, you’re looking for mkpasswd , which (at least on Debian) is part of the whois package. Don’t ask why.

anthony@Zia:~$ mkpasswd -m help Available methods: des standard 56 bit DES-based crypt(3) md5 MD5 sha-256 SHA-256 sha-512 SHA-512 

Unfortunately, my version at least doesn’t do bcrypt. If your C library does, it should (and the manpage gives a -R option to set the strength). -R also works on sha-512, but I’m not sure if its PBKDF-2 or not.

If you need to generate bcrypt passwords, you can do it fairly simply with the Crypt::Eksblowfish::Bcrypt Perl module.

$ openssl passwd --help Usage: passwd [options] Valid options are: . -6 SHA512-based password algorithm 

For consistent output you can specify the salt:

Output is something similar to:

$6$YOUR_SALT$q/oDR4twC1ik4RoxTJJtX.3MjenHVapkMaBbq2NcRHGQjqhIWRNcEVitYZhyIx98D7lF7qs0vLTq17X0nEr8I. 

with: 6 between «$» indicating the algorithm («-6» above), followed by YOUR_SALT and «$», finishing with the SHA512 sum.

You can use the doveadm utility, which is included in the dovecot package.

Result example:

$6$0JvQ1LLFESzA16.I$JVdKAIq0igudTq06BMqzT9rL1gRawMPwLr9U3/kBMKUqZdONfa0wubC89C35LKl3aE16CRH57BfGb4ygPLggL1 

Just cut and you’ll get your SHA512 hashed string.

Doesn’t work for me as a regular user: doveadm(jotik): Fatal: Error reading configuration: stat(/etc/dovecot/dovecot.conf) failed: Permission denied (euid=1000(jotik) egid=100(users) missing +x perm: /etc/dovecot, we’re not in group 97(dovecot), dir owned by 0:97 mode=0750)

«Permission denied» is not related to the original question. The default dovecot setting is not to let end-user read any files in the /etc/dovecot subdirectory, particularily users (and password ) file. Become root, and then you can see those files.

The point is that doveadm cannot be run by a regular user, so this command is not a solution to the original question for someone who isn’t (or cannot become) root. That someone typically isn’t interested in reading any files in the /etc/dovecot directory, and shouldn’t need to just in order to generate a password hash.

then enter the word you want hashed.

I don’t believe grub is on c7 so you can use: python -c ‘import crypt,getpass; print(crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))’

To expand on @slm’s workarounds above, if you’re worried about someone getting a hold of your bash history and seeing the plain text password, you can insert raw_input() in the python statement where the salt and password fields go so it prompts you for them. The text isn’t masked while you’re typing, but it won’t show up in your bash history. You could also start the command with a leading space, but I always forget to do that.

python -c "import crypt, getpass, pwd; print crypt.crypt(raw_input(), '\$6\$' + raw_input() + '\$')" 

You can also configure bash to not record commands prefixed with a space adding HISTCONTROL=ignorespace to your .bashrc file. When you run a command you want to exclude from your history simply type a space then the actual command.

Читайте также:  Hp laserjet pro 400 driver linux

sha512 htpasswd

Command which asks for user and password and generates a regular htpasswd-file:

python -c 'import crypt,getpass; print(getpass.getpass("Name: ")+":"+crypt.crypt(getpass.getpass(),crypt.mksalt(crypt.METHOD_SHA512)))' >> htpasswd 

Works with all python versions > 2.5.

I did the same thing with NodeJs before:

 echo "console.log(require('crypto').createHmac('sha512', 'nonbase64key').update('password').digest('hex'))" | node 

it’s equivalent in python is:

python3 -c 'import hashlib;import base64;import hmac;print(hmac.new(b"nonbase64key", "password".encode(), hashlib.sha512).hexdigest())' 

And the equivalent shell command is:

echo -n "password" | openssl sha512 -hmac "nonbase64key" 

All examples will be using SHA-512, as password placeholder and as salt placeholder.

mkpasswd

Note: mkpasswd binary is installed via the package whois on Debian / Ubuntu only. On other Linux distribution such as ArchLinux, Fedora, CentOS, openSUSE, etc. mkpasswd is provided by the expect package but is an totally different utility which is available as expect_mkpasswd on Debian / Ubuntu. whois of all other Linux distro doesn’t include mkpasswd but the source (C lang) can be found on the original repository https://github.com/rfc1036/whois.

# With a random password and random salt mkpasswd -m sha-512 # With a random random salt mkpasswd -m sha-512 '' # Choosing both password and salt mkpasswd -m sha-512 '' '' # Read password from stdin to avoid leaking it in shell command history mkpasswd -m sha-512 --stdin 

OpenSSL

# With a random random salt openssl passwd -6 '' # Choosing both password and salt openssl passwd -6 --salt '' '' # Read password from stdin to avoid leaking it in shell command history openssl passwd -6 -stdin openssl passwd -6 

Ruby

# With a random password and random salt ruby -e 'require "securerandom"; puts SecureRandom.alphanumeric(20).crypt("$6$" + rand(36 ** 8).to_s(36))' # With a random random salt ruby -e 'puts "".crypt("$6$" + rand(36 ** 8).to_s(36))' # Choosing both password and salt ruby -e 'puts "".crypt("$6$")' # Read password from stdin to avoid leaking it in shell command history ruby -e 'require "io/console"; puts IO::console.getpass.crypt("$6$" + rand(36 ** 8).to_s(36))' 

Note: for those who complains that Random#rand is a PRNG, you can use the secure SecureRandom#rand but it’s not very important is rand is used only to generate the salt which is publicly available in the hash at the end.

ruby -e 'require "securerandom"; puts "".crypt("$6$" + SecureRandom.rand(36 ** 8).to_s(36))' 

Perl

# Choosing both password and salt perl -le 'print crypt "", "\$6\$\$"' 

Python

# With a random random salt python -c 'import crypt; print(crypt.crypt("", crypt.mksalt(crypt.METHOD_SHA512)))' # Choosing both password and salt python -c 'import crypt; print(crypt.crypt("", "$6$"))' # Read password from stdin to avoid leaking it in shell command history python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512))) 

grub-crypt

Note: The grub package doesn’t include grub-crypt in many distros.

# With a random random salt # Read password from stdin to avoid leaking it in shell command history grub-crypt --sha-512 

Источник

Читайте также:  Часовой пояс arch linux

Создать хэш пароля 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/

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

Источник

Оцените статью
Adblock
detector