Поки що я можу зібрати, це те, що фейк-корт використовується для надання права власності на файл, який повинен бути root, коли він розпаковується / tar'ed. Моє запитання: чому ти не можеш просто зробити це з чуном?
Тому що ви не можете просто зробити це з chown
, принаймні, як не-root користувач. (І якщо ви працюєте як root, вам не потрібно fakeroot
.) У цьому вся суть fakeroot
: дозволити програмам, які розраховують на те, що виконуватиметься як root, як звичайний користувач, роблячи вигляд, що операції, що вимагають кореня, успішні.
Зазвичай це використовується при складанні пакету, так що процес установки встановленого пакету може протікати без помилок (навіть якщо він працює chown root:root
або install -o root
тощо). fakeroot
пам’ятає фальшиве право власності, яке воно робило вигляд, що дає файли, тому наступні операції, що дивляться на право власності, бачать це замість реального; це дозволяє наступним tar
запускам, наприклад, зберігати файли як права власності на root.
Як фальшивка зупиняє небажані ескалації привілеїв в Linux? Якщо fakeroot може підманути tar на створення файлу, який належав root, чому б не зробити щось подібне з SUID?
fakeroot
не вдається tar
робити щось, він зберігає зміни, які збирання хоче внести, не дозволяючи цим змінам вступити в силу в системі, що розміщує збірку. Вам не потрібно fakeroot
створювати тарбол, що містить файл, що належить root та suid; якщо у вас є двійковий файл evilbinary
, біг tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, як звичайний користувач, створить тарбол, що містить evilbinary
, що належить root, і suid. Однак ви не зможете витягти цей тарбол і зберегти ці дозволи, якщо ви не зробите це як root: тут не відбувається ескалації привілеїв. fakeroot
є привілеєм де-інструмент розгортання: дозволяє запускати збірку як звичайний користувач, зберігаючи ефекти, які склала б, якби вона була запущена як root, що дозволяє повторно відтворювати ці ефекти. Застосування ефектів «по-справжньому» завжди вимагає кореневих привілеїв; fakeroot
не передбачає жодного способу їх придбання.
Щоб зрозуміти використання fakeroot
більш детально, врахуйте, що типова побудова розподілу включає в себе наступні операції (серед багатьох інших):
- встановити файли, що належать root
- ...
- заархівуйте ті файли, які все ще належать root, так що після їх вилучення вони матимуть корінь
Перша частина, очевидно, виходить з ладу, якщо ви не root. Однак при запуску в режимі fakeroot
, як звичайний користувач, процес стає
- встановити файли, що належать root - це не
fakeroot
вдалося, але робить вигляд, що це успішно, і запам'ятовує змінене право власності
- ...
- архівуйте ті файли, які все ще належать root - коли
tar
(або будь-який архіватор використовується) запитує систему, що таке право власності на файл, fakeroot
змінює відповідь, щоб відповідати власності, записаному раніше
Таким чином, ви можете запустити збірку пакету, не використовуючи root, отримуючи ті самі результати, які б ви отримали, якби ви справді працювали як root. Використання fakeroot
безпечніше: система все ще не може зробити все, що не може зробити ваш користувач, тому розроблений процес установки не може пошкодити вашу систему (крім того, щоб торкатися ваших файлів).
У Debian інструменти збирання були вдосконалені, щоб більше не вимагати цього, і ви можете створювати пакети безfakeroot
. Це підтримується dpkg
безпосередньо Rules-Requires-Root
директивою (див. rootless-builds.txt
).
Щоб зрозуміти мету fakeroot
та аспекти безпеки запуску як root або ні, може допомогти розглянути мету упаковки. Коли ви встановлюєте частину програмного забезпечення з джерела для використання на всій системі, виконайте такі дії:
- скласти програмне забезпечення (що можна зробити без пільг)
- встановити програмне забезпечення (яке потрібно зробити як root, або принаймні так, як користувачеві дозволено записувати у відповідні системні місця)
Коли ви пакуєте частину програмного забезпечення, ви затягуєте другу частину; але щоб це зробити успішно, вам все одно потрібно «встановити» програмне забезпечення в пакет, а не в систему. Отже, коли ви пакуєте програмне забезпечення, процес стає:
- скласти програмне забезпечення (без особливих пільг)
- зробіть вигляд, що встановлюєте програмне забезпечення (знову без особливих привілеїв)
- захоплення інсталяції програмного забезпечення як пакета (ditto)
- зробити пакет доступним (дітто)
Тепер користувач завершує процес, встановивши пакет, який потрібно зробити як root (або знову ж таки, користувач з відповідними привілеями записати у відповідні місця). Тут реалізується відкладений привілейований процес, і це єдина частина процесу, яка потребує спеціальних привілеїв.
fakeroot
допомагає з кроків 2 та 3 вище, дозволяючи нам запускати процеси встановлення програмного забезпечення та фіксувати їх поведінку, не виконуючись як root.