Відповіді:
З самого початку операційні системи у стилі Unix та Unix (включаючи Linux) завжди зберігали паролі як криптографічні хеші (1). Спочатку ці хеші зберігалися /etc/passwd, але цей файл потребував читати у всьому світі, щоб зробити інформацію доступною для інших цілей - навіть для простого ls -lчитання /etc/passwd, щоб перетворити числовий ідентифікатор кожного власника файлу у його ім'я користувача для відображення. Однак наявність хешованих паролів у файлі, який читається у всьому світі, дозволяє зловмисним користувачам легко отримувати ці хеші та намагатися генерувати корисні паролі (2) для акаунтів інших користувачів.
Щоб запобігти цьому, хешовані паролі врешті-решт були переміщені у файл, читабельний лише корінним (а іноді і привілейованою групою адміністраторів) /etc/shadow,. Це приховує хеші від звичайних користувачів системи, зберігаючи їх доступними для цілей аутентифікації користувачів.
Примітки :
Я знаю педантично, але збережені паролі не зашифровані. Вони хешируються за допомогою криптографічно захищеного (принаймні, на той час, коли це було написано) алгоритму хешуваннявання. Основними відмінностями тут є те, що хеші мають фіксовану довжину (довжина зашифрованого тексту змінюється залежно від довжини зашифрованого тексту) та незворотні (зашифрований текст можна розшифрувати; хешований текст не може).
Оскільки хеші мають фіксовану довжину, існує нескінченна кількість входів, які будуть відповідати будь-якому поданому хешованому поданню. Таким чином, зловмисник може знайти робочий пароль, який не обов'язково такий, як пароль власника користувача, хоча це дуже малоймовірно, враховуючи розмір сучасних криптовалют.
/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 може стати хорошим початковим місцем.
Користувачі вказані у /etc/passwdфайлі. Цей файл містить багато інформації, яка використовується системою не лише для того, щоб дозволити користувачам входити в систему.
Кожен рядок відповідає запису користувача, а різні поля розділені двокрапками. Перший поданий - це логін, за ним - відповідний пароль.
Зашифровані паролі, які використовувалися для зберігання в цьому полі. Однак /etc/passwdфайл повинен бути читабельним для всіх у системі, тому шифрування не запобігає атакам грубої сили, як це сказав @Mikel. Рішення було перенести ці зашифровані паролі в кореневому тільки читається файл: /etc/shadow.
Таким чином, /etc/shadowмістить зашифровані паролі користувачів системи. Система знає , що потрібно перевірити паролі в цьому файлі , коли пароль поле /etc/passwdмістить х в поодинці ( що означає « хрест к / і т.д. / тіні»)
/etc/passwdбули і досі зберігаються хешировані таким же чином, як і у випадку, якщо вони були /etc/shadow. Ви насправді не говорите про те, що паролі в /etc/passwdпростому тексті, але людині, незнайомій з обробкою паролем * nix, було б легко неправильно трактувати вашу відповідь як маючи на увазі це.
xнасправді нічого не означає. Він існує просто як недійсний хеш (той, який не відповідає жодному паролю). Деякі системи використовують !.
Подивимось, чи зможу я отримати всі голоси в світі, оскільки я написав те, що стало пакетом паролів для тіней для 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файли доступними через різні вектори атаки - "Я вкрав файли резервного копіювання", мабуть, найпростіший.