Як зробити паролі користувачів відображеними як чіткий текст у Linux?


28

Ми знаємо, що паролі користувачів зберігаються в /etc/passwdзашифрованому вигляді, тому навіть root не може їх побачити:

jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash

Як показано вище, :x:представляє пароль.

Чи існує спосіб (можлива конфігурація) зберегти пароль /etc/passwdу чистому тексті та таким, щоб корінь міг їх бачити?


10
Ні. І це особливість. Для цього також немає жодної реальної причини, оскільки кореневому обліковому запису не потрібен пароль користувача для доступу до своїх файлів. За яких обставин ви цього хочете?
HalosGhost

1
Мені просто цікаво з цього приводу, чому адміністратор (root) системи не може бачити паролі інших користувачів?
user78050

5
@ user78050, оскільки користувач root не має підстав знати паролі інших користувачів, і було б серйозним ризиком безпеки дозволити їм це робити.
David Z

16
Тому що це порушує найпростіший принцип безпеки в бізнесі: "ніколи не зберігайте паролі в простому тексті". Якщо безпека зроблена добре, тільки користувач повинен знати свій пароль, ніхто більше. Плюс, для цього абсолютно немає причин. Я не можу придумати єдиної адміністративної ситуації, коли це допомогло б користувачеві root дізнатися пароль іншого користувача.
HalosGhost

3
Використовуйте MD5 "метод шифрування", а потім зламайте паролі за допомогою веселкових таблиць .
Cristian Ciupitu

Відповіді:


58

Інші два відповіді сказали вам - правильно! - що це погана ідея ™ . Але вони також сказали вам, що це важко зробити, вимагаючи змінити купу програм.

Що це не так. Це дуже просто. Вам потрібно змінити лише один або два файли конфігурації. Я вважаю важливим вказати на це, тому що ви повинні знати про це під час входу в системи, які ви не контролюєте. Вони насправді не вводять звичайний текстовий пароль /etc/passwdабо /etc/shadowперейдуть в інший файл. Зауважте, що я не перевіряв їх, тому що я краще не маю свого простого тексту.

  1. Відредагувати /etc/pam.d/common-password(щоб виловити пароль змінено) або /etc/pam.d/common-auth(щоб увійти під час входу) та додати… pam_exec expose_authtok log=/root/passwords /bin/cat

  2. Відредагуйте обидва з них та перейдіть з пам_унікс на пам_ужордб crypt=none. Крім того, ви можете вводити його лише у загальний пароль (залишаючи пам’ятник також), щоб просто записувати паролі, коли вони змінюються.

  3. Ви можете видалити shadow(як і будь-які сильні параметри хешу) з пам_unix, щоб відключити тіньовий файл і повернутися до традиційних паролів скріп. Не простий текст, але Джон Розпусник це виправить.

Для отримання додаткової інформації перегляньте посібник адміністратора системи PAM .

Ви також можете змінити вихідний код PAM або написати власний модуль. Вам потрібно буде лише компілювати PAM (або ваш модуль), нічого іншого.


1
Я припускаю, що паролі з текстовим текстом написані /root/passwords.
Faheem Mitha

Btw. дуже добре знати, як це легко і куди мені потрібно дивитись, якщо боїшся компрометованої системи.
erik

8
@erik Прерогатива запитувача вибирає ту відповідь, яку він / вона вважає найбільш корисною як прийняту відповідь. Напевно, добре, що ОП знайшов "не робіть цього!" найкорисніше ... Крім того, щоб бути зрозумілим, це не єдиний спосіб крадіжки паролів на компрометованій або зловмисно керованій системі. Таким чином, ви не можете просто подивитися на конфігурацію PAM, щоб визначити, що ви в безпеці.
дероберт

3
Це швидше припускаючи, що дистрибутив використовує PAM, далеко не всі вони.
Vality

1
@msw Я відповів, тому що, мабуть, поширена думка, що запустити вікно Linux із зрозумілими текстовими паролями важко (Бобі, на його честь, виправдав свою відповідь; Ентон все ще робить це важко). Це небезпечне переконання, оскільки воно заохочує повторне використання пароля. Якби я щойно опублікував відповідь "насправді, це просто, ти редагуєш файл чи два, але я не скажу тобі", тоді ніхто б не повірив у це. Навіщо слухати мене над (на той час) значно вищими, більш ретельними відповідями? Здійснення суті вимагає сказати, як це зробити. (Хоча вони не копіюють і не вставляють приклади. Думку все-таки потрібно використовувати.)
derobert

34

О, дорогий, добре, почнемо з самого початку ...

Ми знаємо, що паролі користувачів зберігаються в / etc / passwd, але зашифрованим способом

Ні, вони були збережені в /etc/passwd, і це було деякий час назад. Сьогодні паролі зберігаються у так званому тіньовому файлі , більшість часу /etc/shadow.

але зашифрованим способом, тому навіть корінь не може їх побачити:

Я знаю, що іноді він використовується взаємозамінно, але хешування - це не шифрування . Шифрування за самим визначенням є зворотним, тобто ви можете перевести зашифровану річ назад у її форму чіткого тексту. Хешинг розроблений таким чином, щоб не бути оборотним жодним чином (крім грубої сили). Оригінальна форма чіткого тексту чогось хешированого не повинна бути відновлена.

Паролі у тіньовому файлі зберігаються як хеші.

як показано вище: x: представляють пароль

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

Чи існує спосіб (можлива конфігурація) зберегти пароль у / etc / passwd у чистому тексті та таким, щоб корінь міг їх бачити?

Так, це дійсно можливо, але це не є хорошою ідеєю з якихось причин. Відповідь Дероберта пояснює досить простий спосіб зробити це .

Але чому це не гарна ідея? Ну, з простої, але дуже важливої ​​причини: безпека. Я пропоную прочитати ці питання:

Але підводячи підсумок, припустимо наступне: У компанії є сервер, усі облікові записи користувачів захищені своїми паролями, а дані в цих облікових записах користувачів шифруються одним і тим же паролем. Зловмисник ззовні отримує доступ до сервера, але вони не можуть отримати доступ до жодної важливої ​​інформації, оскільки це все ще зашифровано в облікових записах користувачів.

Тепер припустимо, що паролі зберігатимуться у простому тексті. Зломщик раптом отримав би доступ до всього , тому що паролі можна прочитати. Але якщо вони зберігаються як хешовані значення, вони близькі нікому не корисні, крім людей, що мають багато ресурсів, щоб здійснити жорстоку атаку.


2
На захист ОП щодо шифрування та хешування, сторінка криптовалюти від glibc зазначає: «Якщо сіль - це символьна рядок, що починається з символів, "$id$"після чого рядок закінчується символом "$": $id$salt$encrypted тоді замість використання машини DES idвизначає використаний метод шифрування, і це потім визначає, як інтерпретується решта рядка ».
Крістіан Цюпіту

1
Цікаво, але не відповідає на головне питання, як це робить відповідь Дероберта.
erik

6
@erik Іноді правильна відповідь на питання - "не роби цього", навіть коли річ технічно можлива. Це один із тих часів.
Жил 'ТАК - перестань бути злим'

1
Я пропоную змінити цей рядок: "Ні, немає способу, крім зміни багатьох програм та способу їх роботи". Це залишає враження, що зробити це не дуже легко (або принаймні просто зробити щось функціонально рівнозначне).
derobert

2
@Bobby Це відмінна відповідь, але не відмінна відповідь. Щоб зробити це чудовою відповіддю, слід змінити частину про те, що це "не легко", тому що це очевидно, як показано у відповіді Дероберта.
Майкл Дорст

10

Перш за все, зашифровані паролі не є /etc/passwd, але вони є /etc/shadow. Однією з причин цього є те, що /etc/passwdвоно читається загальнодоступно (так що ви можете, наприклад, знайти інформацію про поле GECOS для іншого користувача), і, особливо за старими схемами шифрування, може дозволити жорстокі атаки проти зашифрованого пароля.

Щоб просто зберігати паролі в простому тексті, не потрібно, і знадобиться оновлення програми паролів і бібліотек, що читають /etc/shadow інформацію, щоб перевірити чи справжні паролі. І тоді ви повинні сподіватися, що всі утиліти використовують спільні бібліотеки для доступу до цієї інформації, а не статично пов’язані з тим, що не розуміє простого зберігання текстового пароля.

Якщо це було б варіантом у конфігурації налаштування, то завжди були б дурні люди, які вмикали б його неналежним чином. І хоча вони досі працюють на екранах CRT і транслюють це таким чином, що його можна легко забрати поза їхньої будівлі, поки вони переглядають інформацію.

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

Повинно бути більше цікавих речей, роботу яких можна дослідити у вашій системі.


3
/etc/shadowне зберігає зашифровані паролі, він зберігає хеші паролів. Так, функція викликається crypt, і на сторінці людини написано "зашифровано", але якщо ви називаєте рибу велосипедом, це не дає їй колеса. Зауважте, що /etc/shadowзберігати паролі можна в іншому форматі без перекомпіляції будь-яких програм (принаймні, на Linux та Solaris): методи аутентифікації завжди динамічно пов'язані. Зберігання паролів у простому тексті було б жахливою ідеєю, але можливо, доклавши трохи роботи .
Жил 'ТАК - перестань бути злим'

@gilles Я просто використав термінологію OPs, але ви праві, що хеш - це більш підходящий термін.
Антон

3

Основна причина (чому це погана ідея) полягає в тому, що жоден користувач (root, адміністратор чи інший) ніколи не повинен мати доступ до пароля іншого користувача.

Просто тому, що пароль - це засіб аутентифікації. Якщо я знаю пароль іншого користувача, я знаю їхні облікові дані (ім’я користувача + пароль), тому я можу ввійти як цей користувач , видаючи себе за нього (або її чи ні).

За будь-яку дію, яку я вчинив, коли ввійшов як цей користувач, за іншого користувача несе відповідальність. І це не так, як повинна працювати автентифікація.

Дії можуть бути згубними, як видалення цілого ряду важливих файлів, стирання жорстких дисків, стирання резервних копій, вимкнення планів ядерної енергетики тощо.

Або просто незаконне. Уявіть банківську установу, де я (адміністратор) має доступ до всіх паролів. Використовуючи пароль касира, я можу замовити переміщення мільйона доларів з банківського рахунку президента на банківський рахунок прибиральника вікон. Тоді використовуйте головний пароль касира, щоб затвердити транзакцію. Потім затвердіть чек з рахунку очисника вікон на мій власний офшорний банківський рахунок.

Потім я вирушаю на довгі канікули на Багами ...


На цей погляд, хешування паролів та використання окремих тіньових файлів можна розглядати як засіб для виконання цього правила (жоден користувач не повинен мати змогу себе представляти іншим).

І як прокоментував @ Miral * , виняток є тим, suщо, дозволяючи себе за себе (і види відкидання аргументу, наведеного вище), він також веде журнал його використання (тому він змінює правила на "лише адміністратори можуть себе представляти іншим, але журнал зберігається ").

* Приклад банку, мабуть, не найкращий. У будь-якому середовищі, де безпека є вирішальною, зазвичай потрібно більше засобів аутентифікації та авторизації, ніж лише один пароль.


Однією з вад цього аргументу є те, що користувач root може видати себе за будь-якого іншого користувача в системі, не знаючи свого пароля. Так просто, як su otheruser.
Мірал

@Miral ви маєте рацію, я не вважав це. І хоча використання suреєструється, su не веде облік того, що насправді робиться, поки користувач видає себе за інше. І шкідливий корінь завжди може змінити журнали, щоб приховати дії майбутніх слідчих.
ypercubeᵀᴹ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.