Do tej pory mogę zebrać, że fakeroot służy do nadania własności plikowi, który musi być rootowany, gdy jest rozpakowany / tar'owany. Moje pytanie, dlaczego nie możesz tego zrobić z chownem?
Ponieważ nie możesz tego po prostu zrobić chown
, przynajmniej nie jako użytkownik inny niż root. (A jeśli działasz jako root, nie potrzebujesz fakeroot
). Chodzi o to, fakeroot
aby pozwolić programom, które oczekują, że będą uruchamiane jako root, jak normalny użytkownik, udając, że operacje wymagające roota powiodły się.
Jest używany zazwyczaj podczas budowania pakietu, dzięki czemu proces instalacji pakietu jest zainstalowana można kontynuować bez błędu (nawet jeśli to działa chown root:root
, albo install -o root
, etc.). fakeroot
pamięta fałszywą własność, którą udawał, że przekazuje pliki, więc kolejne operacje dotyczące własności widzą to zamiast prawdziwej; umożliwia to tar
na przykład kolejne uruchomienia do przechowywania plików należących do roota.
W jaki sposób fakeroot zatrzymuje niechciane eskalacje uprawnień w systemie Linux? Jeśli fakeroot może oszukać tar do utworzenia pliku, który był własnością roota, dlaczego nie zrobić czegoś podobnego z SUID?
fakeroot
nie stara tar
się niczego robić, zachowuje zmiany, które chce wprowadzić kompilacja, nie pozwalając, by zmiany te wpłynęły na system, na którym kompilacja jest wykonywana. Nie musisz fakeroot
tworzyć tarballa zawierającego plik należący do roota i suid; jeśli masz plik binarny evilbinary
, działając tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
jako zwykły użytkownik, utworzy plik archiwalny zawierający evilbinary
własność użytkownika root i suid. Jednak nie będziesz mógł wyodrębnić tego archiwum i zachować tych uprawnień, chyba że zrobisz to jako root: tutaj nie ma eskalacji uprawnień. fakeroot
jest przywilejem deNarzędzie do skalowania: umożliwia uruchamianie kompilacji jako zwykły użytkownik, przy jednoczesnym zachowaniu efektów, jakie miałaby kompilacja, gdyby była uruchomiona jako root, umożliwiając późniejsze odtworzenie tych efektów. Zastosowanie efektów „na żywo” zawsze wymaga uprawnień roota; fakeroot
nie zapewnia żadnej metody ich uzyskania.
Aby zrozumieć fakeroot
bardziej szczegółowo użycie , należy wziąć pod uwagę, że typowa kompilacja dystrybucji obejmuje następujące operacje (między innymi):
- instaluj pliki, których właścicielem jest root
- ...
- zarchiwizuj te pliki, które nadal należą do roota, aby po ich rozpakowaniu były własnością roota
Pierwsza część oczywiście kończy się niepowodzeniem, jeśli nie jesteś rootem. Jednak podczas działania fakeroot
jako normalny użytkownik staje się procesem
- instaluj pliki, których właścicielem jest root - to się nie
fakeroot
udaje , ale udaje, że się powiodło, i pamięta o zmianie własności
- ...
- zarchiwizuj te pliki, które nadal należą do roota - kiedy
tar
(lub jakikolwiek inny archiwizator jest używany) pyta system, co to jest własność pliku, fakeroot
zmienia odpowiedź, aby pasowała do własności zarejestrowanej wcześniej
W ten sposób można uruchomić kompilację pakietu bez uprawnień użytkownika root, uzyskując takie same wyniki, jakie można uzyskać, jeśli naprawdę działa się jako użytkownik root. Korzystanie fakeroot
jest bezpieczniejsze: system nadal nie może zrobić nic, czego użytkownik nie może zrobić, więc nieuczciwy proces instalacji nie może uszkodzić systemu (poza dotknięciem plików).
W Debianie narzędzia do kompilacji zostały ulepszone, aby już tego nie wymagały, i można budować pakiety bezfakeroot
. Jest to obsługiwane dpkg
bezpośrednio przez Rules-Requires-Root
dyrektywę (patrzrootless-builds.txt
).
Aby zrozumieć cel fakeroot
i aspekty bezpieczeństwa działania jako root, czy nie, pomocne może być rozważenie celu pakowania. Podczas instalowania oprogramowania źródłowego do użytku ogólnosystemowego postępujesz w następujący sposób:
- zbudować oprogramowanie (co można zrobić bez uprawnień)
- zainstaluj oprogramowanie (które należy wykonać jako root, lub przynajmniej jako użytkownik, który może pisać w odpowiednich lokalizacjach systemu)
Kiedy pakujesz oprogramowanie, opóźniasz drugą część; ale aby to zrobić pomyślnie, nadal musisz „zainstalować” oprogramowanie w pakiecie, a nie w systemie. Kiedy więc pakujesz oprogramowanie, proces staje się:
- zbudować oprogramowanie (bez specjalnych uprawnień)
- udawaj, że instalujesz oprogramowanie (ponownie bez specjalnych uprawnień)
- przechwycić instalację oprogramowania jako pakiet (to samo)
- udostępnij pakiet (podobnie)
Teraz użytkownik kończy proces instalując pakiet, który należy wykonać jako root (lub ponownie, użytkownik z odpowiednimi uprawnieniami do pisania w odpowiednich lokalizacjach). Tutaj realizowany jest opóźniony uprzywilejowany proces i jest to jedyna część procesu, która wymaga specjalnych uprawnień.
fakeroot
pomaga w krokach 2 i 3 powyżej, umożliwiając nam uruchamianie procesów instalacji oprogramowania i rejestrowanie ich zachowania, bez uruchamiania jako root.