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, fakerootaby 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.). fakerootpamię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 tarna 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?
fakerootnie stara tarsię 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 fakeroottworzyć 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 evilbinaryjako zwykły użytkownik, utworzy plik archiwalny zawierający evilbinarywł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ń. fakerootjest 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; fakerootnie zapewnia żadnej metody ich uzyskania.
Aby zrozumieć fakerootbardziej 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 fakerootjako normalny użytkownik staje się procesem
- instaluj pliki, których właścicielem jest root - to się nie
fakerootudaje , 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, fakerootzmienia 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 fakerootjest 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 dpkgbezpośrednio przez Rules-Requires-Rootdyrektywę (patrzrootless-builds.txt ).
Aby zrozumieć cel fakerooti 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.