Яка мета / etc / тіньових і тіньових кеш-файлів в операційній системі Linux?


9

Яке призначення файлу / etc / shadow в операційній системі Linux? Також, це те ж саме для клієнтів SUSE? Є один тіньовий кешовий файл, який підтримується?

Відповіді:


16

З самого початку операційні системи у стилі Unix та Unix (включаючи Linux) завжди зберігали паролі як криптографічні хеші (1). Спочатку ці хеші зберігалися /etc/passwd, але цей файл потребував читати у всьому світі, щоб зробити інформацію доступною для інших цілей - навіть для простого ls -lчитання /etc/passwd, щоб перетворити числовий ідентифікатор кожного власника файлу у його ім'я користувача для відображення. Однак наявність хешованих паролів у файлі, який читається у всьому світі, дозволяє зловмисним користувачам легко отримувати ці хеші та намагатися генерувати корисні паролі (2) для акаунтів інших користувачів.

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

Примітки :

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

  2. Оскільки хеші мають фіксовану довжину, існує нескінченна кількість входів, які будуть відповідати будь-якому поданому хешованому поданню. Таким чином, зловмисник може знайти робочий пароль, який не обов'язково такий, як пароль власника користувача, хоча це дуже малоймовірно, враховуючи розмір сучасних криптовалют.


Я думаю, що в останньому абзаці ви маєте на увазі сказати "скінченне", а не "нескінченне".
phunehehe

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

@phihag Ах бачу. Але хеш все-таки буде набагато довшим, ніж будь-який запам'ятовується людиною пароль :)
phunehehe

1
Кількість входів, що призводять до будь-якого зіткнення, не є нескінченною, тому що довжина рядків, які можуть бути хешировані будь-яким заданим алгоритмом, є кінцевою . Дивись, наприклад , stackoverflow.com/questions/17388177 / ...
MariusMatutiae

1
@MariusMatutiae Припустимо, дійсно погана хеш-реалізація, яка скорочується на 3 символи. Правильний пароль - "abc". Входи "abcd", "abcde", "abcdef" тощо будуть також створювати той самий вихідний хеш і, отже, також будуть прийняті. Існує нескінченна кількість рядків, які починаються з "abc" і тривіально стикаються. (Зверніть увагу, що ми в основному не погоджуємося з приводу того, чи означає "вхід" до або після усічення.)
Дейв Шероман

6

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

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

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

Таким чином зашифрований пароль був переміщений у новостворений /etc/shadow, який читається лише коренем.

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

Див man 5 shadow( веб - версію для отримання повної інформації про формат файл).


Я не можу сказати, чи однаково це для SUSE, не знаючи, з якою версією SUSE ви маєте справу. Наприклад, ваша система SUSE може використовувати Blowfish, а не MD5.

Ви також мали на увазі, що ви змішуєте свій /etc/shadowфайл із системою, що працює з іншим дистрибутивом Linux, але не сказали, що таке інший дистрибутив.

Наприклад, див. Проблеми з переміщенням тіньового файлу з SuSE 9.3 на Ubuntu Server x86_64 .

Щоб спробувати розібратися, відкрийте /etc/shadowі подивіться, чи зашифроване поле пароля починається з $1$або $2$. Якщо він містить $1$, то це MD5 і сумісний з більшістю інших дистрибутивів. Якщо він містить $2$, то, ймовірно, Blowfish згідно з тіньовими файлами Blowfish на Debian .

Якщо ви використовуєте Ubuntu, першим результатом пошуку Google для мухомора Ubuntu може стати хорошим початковим місцем.


3

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

Кожен рядок відповідає запису користувача, а різні поля розділені двокрапками. Перший поданий - це логін, за ним - відповідний пароль.

Зашифровані паролі, які використовувалися для зберігання в цьому полі. Однак /etc/passwdфайл повинен бути читабельним для всіх у системі, тому шифрування не запобігає атакам грубої сили, як це сказав @Mikel. Рішення було перенести ці зашифровані паролі в кореневому тільки читається файл: /etc/shadow.

Таким чином, /etc/shadowмістить зашифровані паролі користувачів системи. Система знає , що потрібно перевірити паролі в цьому файлі , коли пароль поле /etc/passwdмістить х в поодинці ( що означає « хрест к / і т.д. / тіні»)


1
Зауважте, що паролі, що зберігаються в, /etc/passwdбули і досі зберігаються хешировані таким же чином, як і у випадку, якщо вони були /etc/shadow. Ви насправді не говорите про те, що паролі в /etc/passwdпростому тексті, але людині, незнайомій з обробкою паролем * nix, було б легко неправильно трактувати вашу відповідь як маючи на увазі це.
Дейв Шерохман

Дякую за ваш коментар, який допоміг мені покращити свою відповідь.

Я не думаю, що xнасправді нічого не означає. Він існує просто як недійсний хеш (той, який не відповідає жодному паролю). Деякі системи використовують !.
користувач1686

3

Подивимось, чи зможу я отримати всі голоси в світі, оскільки я написав те, що стало пакетом паролів для тіней для Linux у 87 році;)

Оригінальний /etc/passwdфайл містив модифікований хеш пароля ясного тексту. На час створення crypt()функції вважалося (і про це заявили творці операційної системи UNIX), що атаки на хеш паролів були б нездійсненними, через кількість можливих паролів та використання 12-бітового пароля (4 096 можливих значень) "сіль". Кожен можливий пароль ясного тексту мав 4 096 можливих хешованих значень і з 64-бітним хешованим результатом, що дало загалом 2 ^ 72 можливих хешавання паролів.

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

У 1980-х роках стало очевидним, що напади словника на хеш паролів, що зберігається у /etc/passwdфайлі, стають здійсненими, і він /etc/shadowбув представлений AT&T UNIX в ранньому випуску системи V. Я задокументував, які саме Manpages використовував для написання оригінальної бібліотеки Shadow, і я Ви забули, але це, безумовно, ранній реліз System V, ймовірно, SVR3.2.

Що зробили AT&T, і що я реалізував для SCO Xenix (оригінальний SCO Xenix, а не пізніше злий SCO Xenix) у 87 році, який, врешті-решт, увійшов до використання в Linux, було просто перемістити хешований пароль на /etc/shadow. Це запобігло атаку, коли непривілейований користувач придбав копію /etc/passwdта здійснив атаку проти неї. Якщо ви знайомі з тим, чому я писав Shadow, в першу чергу, мені довелося користувачеві завантажити свій /etc/passwdфайл через UUCP ще в ті часи, коли ми все ще використовували UUCP майже для всього.

На той час, коли Linux був створений і набув широкого розповсюдження, існувало дуже велика кількість інструментів для атаки хешей паролів. Високопродуктивні повторні реалізації crypt()були однією дорогою, а атаки на основі словника за допомогою таких інструментів, як Crack і libcrack, були іншими. Початковий порт виконали Нейт Холлоуей та Флорія Ла Рош (я дав їм кредит, я не знаю, чи хтось робив роботу перед ними).

Врешті-решт використання crypt()хешів на базі даних, навіть у захищеному файлі, вже не було захищеним, і MD5були зроблені оригінальні зміни хешу на основі. MD5врешті-решт вважалося занадто слабким, і використовувались новіші хеши.

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

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