Чому для дозволу на файл / etc / shadow встановлено 600?


25

Дозвіл дорівнює /etc/shadow600, а це означає, що він не читається ні для кого, крім root.

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


Ви впевнені , що дозволу на /etc/shadowце 600?
edwinksl

4
Якщо пароль вашого облікового запису Stackoverflow є хешованим, ви готові показати свій хешований пароль іншим?
Єон

5
@ByteCommander. Іноді я хочу отримати спосіб редагування.
TRiG

Відповіді:


60

Для запобігання офлайн-нападів.

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

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


Зауважте, що дозволи на Ubuntu насправді 640не 600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

Це не має великого значення, оскільки дозволів для інших досі немає, і, за замовчуванням, ніхто не є в shadowгрупі.


Спочатку хеші зберігалися в /etc/passwd(тому його називають passwd), тому що тоді, коли був створений Linux, зламати хеш, навіть слабкі типи, які використовувались тоді, було практично неможливо. Зрештою, однак, потужність обробки просунулася до того моменту, коли злом хешу, принаймні відносно слабкого пароля, став здійсненним.

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


1
Добрий дзвінок про копіювання файлу!
Rinzwind

1
і мені не потрібна відповідь ;-) редагувати: хм він встановив її на мою: P Вибачте: D edit2, і тепер вона знову повертається. eh: D
Rinzwind

6
Востаннє я перевірив, що ви можете повернути хешований пароль назад у / etc / passwd та видалити рядок із / etc / shadow та очікуєте, що зможете увійти. / Etc / shadow існує, щоб його можна було встановити на 600 з вказаної причини у цій відповіді.
Джошуа

8
Варто зазначити, що дозволи на / etc / passwd - 644. Я вважаю, що історично тут зберігалися хеши паролів. Однак зміна цього файлу на 640 спричинила б всілякі проблеми сумісності, тому замість цього хеші паролів були переміщені в тінь і видалені з passwd - це дозволяє іншій інформації в passwd залишатися читаною у всьому світі, а хеши паролів зберігаються в таємниці в інший файл.
Родні

4
@Rodney як хтось, хто виріс на BSD 4.3, ти прав. Хеші зберігалися в / etc / passwd. Коли коли Vax 11/780 був найсучаснішим, напад грубої сили на паролі у файлі вважався неможливим. Можливо, ще важливіше, що Інтернет [Арпанет] був сонним маленьким затоком, і такі речі навряд чи розглядалися; не було тільки rshin / telnet. Збереження файлу пароля 644 означає, що утиліти, такі як lsне потрібно встановлювати корінь для перекладу з uid в ім'я.
Майк Ш

13

Власне, / etc / shadow створено, щоб дозволити відійти від загальнодоступного списку імен користувачів та паролів.

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

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

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

Погляньте на / etc / passwd у вашій системі. Бачите те друге поле, яке говорить xскрізь? Він використовувався для зберігання хешованого пароля для відповідного облікового запису.

Проблема полягала в тому, що люди могли завантажувати / etc / passwd, а то й не завантажувати його та працювати над злом паролів. Це не було великою проблемою, поки комп'ютери не були особливо потужними (Кліффорд Столл, в «Яйце зозулі» , дає, наскільки я пам’ятаю, час для хешування одного пароля в системі класів IBM PC в середині 1980-х років, як приблизно другий ), але це стало проблемою із збільшенням потужності обробки. В якийсь момент, з гідним списком слів, зламати ці паролі стало занадто просто. З технічних причин ця схема також не могла підтримувати паролі довжиною більше восьми байтів.

Для вирішення цього було зроблено дві речі:

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

Цей файл / etc / shadow.

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

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

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


мені дуже подобається, як ви описуєте кожну річ :) (y)
Shubhanshu Vishwakarma

Термінологія / етимологія: /etc/shadowне містить "тіньових паролів" (тому що це не річ). Весь файл - це тінь /etc/passwd. Ознайомтеся з тим, як використовується термінологія в паролі для тіней Linux HOWTO : Чому затінювати ваш пароль passwd? . На відміну від деяких інших застосувань терміна "Shadow" в обчисленнях, він не є тіньовою копією (як, наприклад, затінення коду BIOS в ОЗУ замість запуску з ROM). Поле в / etc / passwd - це заповнювач, який містить спеціальний символ, що означає "хеш справжнього пароля знаходиться в / etc / shadow".
Пітер Кордес

Хороша історія, але 1 сек. за паролем навряд чи було обмеженням навіть у 1980-х роках, не тоді, коли основні паролі використовували більше 1% людей кожен.
Уоррен Роса

1
@WarrenDew Не впевнений, чи робиш ви факт чи думку. crypt () має 12-бітну сіль та 12 + 64-бітний вихід для восьмибайтового пароля (тоді зазвичай кодується base64). Для звичайних паролів, так, ви, ймовірно , можете атакувати їх з допомогою грубої сили, але це не займе , що велика частина пароля , щоб розтріскування при переборі нездійсненного , якщо кожна перевірка пароля займає друге місце . Попереднє обчислення солоної таблиці навіть для одного пароля зайняло б порядку години зі швидкістю одного шифрування в секунду, плюс вам довелося боротись з обмеженим сховищем (40-80 Мб було багато в ті дні).
CVn

@PeterCordes Добре. Я вилучаю цей уривок, тому що він дійсно не має особливого значення для відповіді на питання ОП.
CVn

10

Чому для дозволу / etc / shadow файл встановлено 600?

Хто тобі це сказав?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • це 640.

Проста відповідь: дозволи в Linux сприймаються серйозно. Немає підстав для того, щоб "інші" щось робили /etc/shadow. І немає ніякої причини для групи "тінь" писати до неї. І виконання поза порядком.

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

Тому що для цього немає жодної причини.

Хеші - односторонні. Надання комусь доступу для читання дозволяє йому використовувати скрипт для зловживання цим одностороннім способом: просто перелічіть будь-яке слово, яке ви можете уявити, і створіть хеш. У якийсь момент це може відповідати паролю. Можливо, піде й деякий час.

Ця відповідь цікава і має деякі оцінки щодо грубого насильства.


640 призначений для звичайного користувача ?? користувач групи може читати тіньовий файл ??
Shubhanshu Vishwakarma

Вибачте? Файл 640. Тож читайте, записуйте для користувача "root" та читайте для групи "тінь". "тінь" - це пільгова система, створена групою для цієї конкретної мети.
Rinzwind

2

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

Але /etc/passwdйого неможливо захистити від читання: його застосовують усілякі програми для зіставлення числових ідентифікаторів користувачів на імена користувачів, а також для пошуку домашніх каталогів, оболонок за замовчуванням, повного імені користувача (та номера офісу тощо - перевірити man finger) . Тож чутлива частина, хешируючи пароль, була переміщена до /etc/shadow, а решта залишилася такою, якою вона була. Ось чому /etc/passwd, окрім імені, містить усе, крім пароля (хеш).


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