Генерувати пароль вручну для / etc / shadow


109

Мені потрібно вручну відредагувати, /etc/shadowщоб змінити пароль root всередині зображення віртуальної машини.

Чи є інструмент командного рядка, який бере пароль і генерує /etc/shadowсумісний хеш пароля у стандартному режимі?

Відповіді:


126

Ви можете використовувати такі команди для тих же:

Спосіб 1 (md5, sha256, sha512)

openssl passwd -6 -salt xyz  yourpass

Примітка: при проходженні -1буде створено пароль MD5, -5SHA256 і -6SHA512 (рекомендовано)

Спосіб 2 (md5, sha256, sha512)

mkpasswd --method=SHA-512 --stdin

Методи приймає md5, sha-256іsha-512

Спосіб 3 (des, md5, sha256, sha512)

Як @tink запропонував, ми можемо оновити пароль, chpasswdвикористовуючи:

echo "username:password" | chpasswd 

Або ви можете використовувати зашифрований пароль за допомогою chpasswd. Спочатку згенеруйте його за допомогою цього:

perl -e 'print crypt("YourPasswd", "salt", "sha512"),"\n"'

Потім пізніше ви можете використовувати створений пароль для оновлення:

echo "username:encryptedPassWd"  | chpasswd -e

Цей зашифрований пароль, який ми можемо використовувати для створення нового користувача з паролем, наприклад:

useradd -p 'encryptedPassWd'  username

3
Під час використання chpasswd -eобов'язково використовуйте одинарні лапки в рядку, в якому ви echoзнаходитесь; в іншому випадку, якщо є $чи інші спеціальні символи, вони не будуть розглядатися буквально.
Загс

4
Зауважте, що виготовлення з них закінчиться у вашій історії оболонок. Я б використав, openssl passwd -1який 1) не закінчується там і 2) генерує випадкову сіль для вас (яка не закінчується і в історії оболонок, ні).
Ztyx

1
openssl passwdдокументування для тих, хто намагається з'ясувати, що -1робить варіант.
CivFan

4
Для хеша SHA-512: python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'- із пов’язаного питання
ServerFault

9
Спосіб 1) та 2) вище використовує MD5 для хешування. MD5 вже не вважається найкращою практикою, оскільки сталися хеш-зіткнення. Використовуйте метод 3) або описаний у unix.stackexchange.com/a/198906/10911 .
Ztyx

36

У Ubuntu 12.04 є mkpasswd (з пакету whois): Перенапружений передній кінець для склепіння (3)

mkpasswd  -m sha-512 -S saltsalt -s <<< YourPass

Де:

  • -m= Обчислити пароль, використовуючи метод TYPE. Якщо TYPE допоможе, друкуються доступні методи.
  • -S = використана сіль.

Напр

$ mkpasswd -m help

-s = Read password from stdin

8
Сіль не потрібно вказувати, mkpasswd піклується про генерацію випадкової.
До 마 SE

1
Незважаючи ні на що, згенеровані паролі з mkpasswd, скопійованих у / etc / passwd, завжди не вдається. Чи є спосіб перевірити, чи правильний хеш, створений mkpasswd?
CMCDragonkai

@CMCDragonkai: Неправильне питання. Вам потрібно запитати, що очікує ваша система.
користувач3183018

1
@To 마 SE: Іноді корисно контролювати сіль. Я використовував це під час тестування геш-генерування паролів для веб-додатків, де я зберігав сіль в окремому магазині. Напр. Хешированний пароль в БД MySQL, а сіль на один користувач у Redis.
користувач3183018

15

Це рішення має такі переваги:

  • Нічого додаткового для встановлення
  • Не зберігає пароль в історії вашої оболонки
  • Генерує випадкову сіль для вас
  • Використовує сучасний сильний алгоритм хешування SHA-512
  • Повторно запитайте пароль, щоб уникнути помилок.

    $ python3 -c "from getpass import getpass; from crypt import *; \
        p=getpass(); print('\n'+crypt(p, METHOD_SHA512)) \
        if p==getpass('Please repeat: ') else print('\nFailed repeating.')"
    

Список літератури


3

Для тих, хто не базується на системах Debian. Python3 працює так само добре.

python3 -c 'import crypt; print(crypt.crypt("test"))'

ПРИМІТКА . Рядок "тест" - це пароль, який ми створюємо як зашифрований рядок.


З певних причин використання crypt.mksaltне працює при генерації паролів для /etc/shadow. Але метод @ Alex131089 працює!
maulinglawns

Тільки що витратив 1,5 години на спробу цього методу, перш ніж я помітив коментар. Хтось може його зняти? Я ще не можу підкоритись.
Michał F

1
@ MichałF, схоже, це не працює, тому що засолювання було зроблено неправильно. Дякуємо, що вказали на це. Я видалив сіль, тому що засолювання залежить від ОС, і це не практично, щоб відповідати на всі діапазони ОС у моїй відповіді. Ви повинні використовувати метод 1, описаний @RahulPatil, оскільки він дозволяє використовувати засолювання і opensslє досить універсальним інструментом.
Грег

Не рекомендується, оскільки він залишає ваш пароль в історії вашої оболонки.
Марк Стосберг

Я маю на увазі, ви завжди можете очистити cmd з історії вашої оболонки
Грег,

3

Жоден із поточних методів для мене не прийнятний - вони або передають пароль у командному рядку (який закінчується в історії моєї оболонки), вимагають встановлення додаткових утиліт ( python3, makepasswd), використання жорстко кодованих солей або використання старих методів хешування.

Цей метод генерує хеши SHA-512 після запиту пароля та використовує випадкову сіль.

Метод, що використовує Python 2 без будь-яких нестандартних бібліотек:

python2 -c 'import crypt, getpass,os,base64; print crypt.crypt(getpass.getpass(), "$6$"+base64.b64encode(os.urandom(16))+"$")'

Щоб зробити це без підказки: (Це залишить ваш пароль в історії команд)

python2 -c 'import crypt, os,base64; print crypt.crypt("MyPassword", "$6$"+base64.b64encode(os.urandom(16))+"$")'

2
Щоб не залишати пароль в історії команд, ви можете встановити (принаймні для bash) змінну середовища HISTCONTROL на "ignorespace", а потім додати провідний пробіл перед командою.
adam820

@ adam820: Це один спосіб ... Це все одно це буде у psвисновку у частку секунди, що команда працює. (Найбезпечнішим залишається користуватися версією, яка вимагає ввести пароль)
Герт ван ден Берг

2

opensslІ chpasswd -eпара не працює в моєму випадку в RHEL6. Об’єднання openssl passwdта usermod -pкомандування зробили цю роботу.

Створіть хеш-значення пароля разом із значенням солі:

$ openssl passwd -1  -salt 5RPVAd clear-text-passwd43

$1$5RPVAd$vgsoSANybLDepv2ETcUH7.

Потім скопіюйте зашифрований рядок у usermod. Не забудьте обернути його окремими цитатами.

$ usermod -p '$1$5RPVAd$vgsoSANybLDepv2ETcUH7.' root

Перевірте це у тіньовому файлі.

$ grep root /etc/shadow

root:$1$5RPVAd$vgsoSANybLDepv2ETcUH7.:17774:0:99999:7:::

1

Ще один метод генерування паролів - це використання opensslінструменту.

Створення паролів MD5

openssl passwd -1 -salt SaltSalt SecretPassword
# output: $1$SaltSalt$FSYmvnuDuSP883uWgYBXW/

Створення паролів DES

openssl passwd -crypt -salt XR SuprScrt
# output: XR1dOp2EVMph2

3
Чим це відрізняється від способу 1 у відповіді Рахуля Патіла ? Зауважте, що старий алгоритм хешування паролів на основі DES точно не повинен використовуватися! По-перше, він підтримує лише паролі до восьми байтів, що в цей час на жаль неадекватно.
CVn

3
Цитуючи Сноудена: "Припустимо, що ваш противник здатний до одного трильйона здогадок за секунду". З не зовсім необгрунтованою набором символів на 70 символів і повністю випадковим паролем це 576 секунд - менше десяти хвилин. Навіть проти менш здібного, але рішучого супротивника, це надзвичайно неадекватно .
CVn

Це не дуже безпечно, тому що MD5 та DES ...
AdamKalisz

Дякуємо, що єдина відповідь, що показує, як шифрувати паролі DES! Дуже корисно для спроб змінити кореневий пароль для прошивки IP-камери.
Malvineous

1

Трохи розкриваючи критику щодо u150825 та Герта ван ден Берга, я виявив потребу в чомусь відносно гнучкому для різних ситуацій із різними системами автоматизації. Я вирішив додати до власної маленької бібліотеки корисних сценаріїв і написати це. Він використовує лише рідні бібліотеки з python 2.7+ та працює також на python3.

Ви можете забрати його тут, якщо хочете. Це так само просто відпустити це у вашому оточенні, якщо вам потрібно використовувати його багато, розміщений http або що завгодно, і ви можете запустити його на будь-якій платформі, використовуючи будь-який доступний для вас інтерпретатор пітонів за замовчуванням, досить надійно розраховуючи, що він працює.

Він за замовчуванням використовує запит на використання getpass із підказками на stderr (що дозволяє легко захопити stdout), але якщо ви покладете рядок до нього, він буде просто зібраний з stdin. Залежно від того, як ви будете займатися цим, це може не відображатися в історії команд, тому просто знайте, з чим ви працюєте. Мені подобається мати гнучкий інструмент, який буде вести себе очікуваним способом, а не сподіватися на пакети чи пітон, що підкреслюють мою дорогу до перемоги 10 різних способів.


Будь пітон в будь-якій версії вже встановлений чи ні, залежить від системи. У чому саме проблема chpasswd?
RalfFriedl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.