Это - то, где GNU Убирает, может быть полезным. Я использовал этот инструмент в течение многих лет для содержания моей ОС в чистоте. Это - диспетчер пакетов для программ, установленных из источника. Вот то, как это работает. Во-первых, у меня есть один единственный каталог, где я сохраняю все такие программы, /usr/local/stow
. В нем существуют каталоги для каждой программы. Когда я компилирую программы из источника, я использую опцию --prefix=/usr/local/stow/program-name
. Когда make install
сделан, исполняемые файлы установлены под /usr/local/stow/program-name/bin
, библиотеки найдены в /usr/local/stow/program-name/lib
, и т.д. Затем я работаю cd /usr/local/stow
и sudo stow program-name
. Последняя команда создает ссылки из /usr/local/stow/program-name/bin
кому: /usr/local/bin/
, от lib до /usr/local/lib
, и т.д. Так, все файлы, которые принадлежат одной программе, расположены в одном каталоге.
Когда я хочу удалить или обновить программу, я работаю sudo stow -D program-name
удалить ссылки и удалить каталог. Теперь, система является чистой, и я могу установить новую версию.
Вот один лайнер:
python -c 'import crypt; print crypt.crypt("test", "$6$random_salt")'
Python 3.3+ включает mksalt
в крипту , что делает его использование намного проще (и безопаснее):
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'
Если вы не предоставите аргумент для crypt.mksalt
(он может принять crypt.METHOD_CRYPT
, ... MD5
, SHA256
] и SHA512
), он будет использовать самый надежный из доступных.
Идентификатор хэша (номер после первого $
) связан с используемым методом:
Я бы порекомендовал вам посмотреть, что такое соли и тому подобное, и, согласно smallclamgers, прокомментировать разницу между шифрованием и хешированием.
Обновление 1:Полученная строка подходит для сценариев теневого запуска и кикстарта. Обновление 2: Предупреждение. Если вы используете Mac, см. Комментарий об использовании этого параметра в python на Mac, где он не работает должным образом.
Я не уверен, как SHA-512 связан с / etc / shadow
. Эти пароли: crypt
ed.
Но если вы хотите, чтобы пароль был хеширован с помощью SHA-512, вы можете сделать это с помощью echo -n the_password | sha512sum
. Вы не можете использовать вывод для /etc/shadow.
Почему бы не выполнить следующую проверку и модификацию машин Centos / RHEL, чтобы гарантировать, что все хеширование паролей для / etc / shadow выполняется с помощью sha512. Затем вы можете просто настроить свой passworkd в обычном режиме с помощью команды passwd
#Set stronger password hasing
/usr/sbin/authconfig --test | grep sha512 > /dev/null
if [ $? -ne 0 ]; then
echo "Configuring sha512 password hashing"
sudo /usr/sbin/authconfig --enableshadow --passalgo=sha512 --updateall
fi
В Debian вы можете использовать mkpasswd для создания паролей с разными алгоритмами хеширования, подходящими для / etc / shadow. Он включен в пакет whois (согласно apt-файлу)
mkpasswd -m sha-512
mkpasswd -m md5
для получения списка доступных алгоритмов хеширования типа:
mkpasswd -m help
HTH
Алгоритмы HASH предназначены для создания дайджестов MESSAGE, они никогда не подходят для паролей, которые должны использовать какой-то HKDF ( http://tools.ietf.org/rfc/rfc5869. txt ) - см. PBKDF2 или BCrypt
Best Answer: grub-crypt
Usage: grub-crypt [OPTION]...
Encrypt a password.
-h, --helpPrint this message and exit
-v, --version Print the version information and exit
--md5 Use MD5 to encrypt the password
--sha-256 Use SHA-256 to encrypt the password
**--sha-512 Use SHA-512 to encrypt the password (default)**
#!/usr/bin/env python
import getpass
from passlib.hash import sha512_crypt
if __name__ == "__main__":
passwd = getpass.getpass('Password to hash: ')
hash = sha512_crypt.encrypt(passwd)
print hash
Вы можете клонировать его из моего репозитория github, если хотите: https://github.com/antoncohen/mksha
Here is a one-liner that uses shell commands to create a SHA-512 hashed password with a random salt:
[root@host] mkpasswd -m sha-512 MyPAsSwOrD $(openssl rand -base64 16 | tr -d '+=' | head -c 16)
Notes
Это не один лайнер, но он может кому-то помочь:
import crypt, getpass, pwd, string, sys, random
randomsalt = ""
password = getpass.getpass()
choices = string.ascii_uppercase + string.digits + string.ascii_lowercase
for _ in range(0,8):
randomsalt += random.choice(choices)
print crypt.crypt(password, '$6$%s$' % randomsalt)
Прочтите комментарий ниже, чтобы узнать о последствиях этого ответа для безопасности
Для тех, кто придерживается мировоззрения Ruby, вот однострочник:
'password'.crypt('$6$' + rand(36 ** 8).to_s(36))
Вот короткий C-код для генерации пароля SHA-512 в различных операционных системах типа Unix.
Файл: passwd-sha512.c
#define _XOPEN_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if ( argc < 3 || (int) strlen(argv[2]) > 16 ) {
printf("usage: %s password salt\n", argv[0]);
printf("--salt must not larger than 16 characters\n");
return;
}
char salt[21];
sprintf(salt, "$6$%s$", argv[2]);
printf("%s\n", crypt((char*) argv[1], (char*) salt));
return;
}
для компиляции:
/usr/bin/gcc -lcrypt -o passwd-sha512 passwd-sha512.c
использование:
passwd-sha512 <password> <salt (16 chars max)>
Perl one-liner solution to generate SHA-512 hashed password:
perl -le 'print crypt "desiredPassword", "\$6\$customSalt\$"'
Worked on RHEL 6
$ htpasswd -c /tmp/my_hash user1
New password:
Re-type new password:
Adding password for user user1
$ cat /tmp/my_hash
user1:$apr1$oj1ypcQz$4.6lFVtKz2nr8acsQ8hD30
Очевидно, вы просто берете второе поле и можете удалить файл, как только добавите его в тень или для использования с sudo (все еще скорее всего shadow).
Этот сценарий работал для меня на Ubuntu 12.04 LTS: https://gist.github.com/JensRantil/ac691a4854a4f6cb4bd9
#!/bin/bash
read -p "Enter username: " username
read -s -p "Enter password: " mypassword
echo
echo -n $username:$mypassword | chpasswd -S -c SHA512
У него есть следующие возможности, которых не хватает некоторым другим альтернативам:
Взгляните на страницу руководства для crypt (3), и я думаю, вы обнаружите, что инструмент crypt был обновлен для использования glibc и sha256 (5 долларов США) и sha512 (6 долларов США), несколько раундов, гораздо больше соли и т. д.
Очевидно, что SHA512 имеет отношение к тому, как работает / etc / shadow.
Тем не менее, эта веб-страница была очень полезной - в частности, MKPASSWD, поскольку это решило МОЮ проблему.
Учитывая потенциально «потерянный» пароль, я могу использовать MKPASSWD и соль для генерации хэша SHA512 и подтвердить / отклонить список возможных паролей.
Я бы использовал Джона-потрошителя - но, по крайней мере, на моем оборудовании (Raspberry Pi) и моем бюджете (ничего) - Джон не может этого сделать (похоже, он не поддерживает расширенный материал crypt / glibc в raspbian free версия.
Имейте в виду, поскольку у меня достаточно прав для чтения / записи / etc / shadow, Я МОЖЕТ просто перезаписать хеш и продолжать жить ... это академическое упражнение.
ПРИМЕЧАНИЯ Заметки Glibc Версия этой функции для glibc2 поддерживает дополнительное шифрование.
If salt is a character string starting with the characters
"$id$" followed by a string terminated by "$":
$id$salt$encrypted
then instead of using the DES machine, id identifies the encryp‐
tion method used and this then determines how the rest of the
password string is interpreted. The following values of id are
supported:
ID | Method
─────────────────────────────────────────────────────────
1 | MD5
2a | Blowfish (not in mainline glibc; added in some
| Linux distributions)
5 | SHA-256 (since glibc 2.7)
6 | SHA-512 (since glibc 2.7)
So $5$salt$encrypted is an SHA-256 encoded password and
$6$salt$encrypted is an SHA-512 encoded one.
Если вам нужна альтернатива однострочным файлам, написанным на perl / python, mkpasswd - хороший вариант. Хотя он включен в пакет Debian whois, он отсутствует в системах CentOS / RHEL. Я модифицировал версию mkpasswd для Debian и включил более сильный механизм генерации соли, основанный на OpenSSL. Полученный двоичный файл полностью сохраняет все параметры командной строки версии Debian. Код доступен на github и должен компилироваться для любого варианта Linux: mkpasswd
Удивительно, что ни один ответ не предлагает простую команду openssl passwd
с параметром -6
. Может быть, он еще не был доступен в 2011 году?
Если вам все равно, вводить пароль в командной строке (рискуя, что он останется в истории команд), вы можете сделать следующее:
openssl passwd -6 YourPassword
Это сгенерирует соль , и выведите следующую строку:
$6$/57kpVAA/kuPUtzV$Ugxo0RTL2uXCvU7WH43c1qn0quMy2ve.qiBYJPG75tFgTN8gI5Jp/FYPXFOzIsASqVTqM42kjN2805VYLHKzm1
С опцией stdin
он также может считывать пароль из STDIN (или файла), поэтому вы не оставите его в истории:
openssl passwd -6 -stdin
После того, как клиент меняет пароль, вы можете скопировать зашифрованный пароль из / и т.д. / тень в файл кикстарта. Как это сделать:
export CRYPTED_PASSWORD=$(grep root /etc/shadow | cut –d ”:” –f 2)
echo "s;rootpw -–iscrypted .*;rootpw –-iscrypted $CRYPTED_PASSWORD;" > sed_script
sed –i –f sed_script template.ks