Поки що я можу зібрати, це те, що фейк-корт використовується для надання права власності на файл, який повинен бути 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.