GNU/Linux >> Znalost Linux >  >> Linux

Jak je možné, že fakeroot není porušením zabezpečení v Linuxu?

Zatím jsem zjistil, že fakeroot se používá k udělení vlastnictví souboru, který musí být root, když je rozbalen/tar'ed. Moje otázka je, proč to nemůžete udělat s chownem?

Protože to nemůžete udělat jen s chown , alespoň ne jako uživatel bez oprávnění root. (A pokud používáte jako root, nepotřebujete fakeroot .) To je celý smysl fakeroot :umožnit programům, které očekávají, že budou spouštěny jako root, běžet jako normální uživatel a přitom předstírat, že operace vyžadující root byly úspěšné.

To se obvykle používá při sestavování balíčku, takže proces instalace instalovaného balíčku může pokračovat bez chyby (i když běží chown root:root nebo install -o root , atd.). fakeroot pamatuje si falešné vlastnictví, které předstíral, že dává soubory, takže následné operace, které se zabývají vlastnictvím, vidí toto místo skutečného; to umožňuje následné tar běží například pro ukládání souborů vlastněných uživatelem root.

Jak fakeroot zastaví nežádoucí eskalace oprávnění v Linuxu? Pokud fakeroot dokáže přimět tar k vytvoření souboru, který vlastnil root, proč neudělat něco podobného s SUID?

fakeroot neklame tar do čehokoli, zachová změny, které chce sestavení provést, aniž by se tyto změny projevily v systému hostujícím sestavení. Nepotřebujete fakeroot vytvořit tarball obsahující soubor vlastněný root a suid; pokud máte binární evilbinary , běžící tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary , jako běžný uživatel, vytvoří tarball obsahující evilbinary , vlastněný rootem a suid. Nebudete však moci extrahovat tento tarball a zachovat tato oprávnění, pokud tak neučiníte jako root:zde nedochází k žádné eskalaci oprávnění. fakeroot je privilegium de -eskalace nástroj:umožňuje vám spouštět sestavení jako běžný uživatel, přičemž zachovává efekty, které by sestavení mělo, kdyby bylo spuštěno jako root, což umožňuje tyto efekty přehrát později. Použití efektů „skutečně“ vždy vyžaduje oprávnění root; fakeroot neposkytuje žádnou metodu jejich získání.

Abychom pochopili použití fakeroot podrobněji zvažte, že typické sestavení distribuce zahrnuje následující operace (kromě mnoha dalších):

  • instalovat soubory vlastněné uživatelem root
  • ...
  • archivujte tyto soubory, stále vlastněné uživatelem root, aby po rozbalení byly vlastněny uživatelem root

První část samozřejmě selže, pokud nejste root. Pokud však běží pod fakeroot , jako normální uživatel se proces stává

  • instalace souborů vlastněných uživatelem root – toto se nezdaří, ale fakeroot předstírá, že uspěje, a pamatuje si změněné vlastnictví
  • ...
  • archivujte tyto soubory, které stále vlastní root – když tar (nebo jakýkoli používaný archivátor) se zeptá systému, jaké je vlastnictví souboru, fakeroot změní odpověď tak, aby odpovídala vlastnictví zaznamenanému dříve

Můžete tedy spustit sestavení balíčku, aniž byste byli root, a přitom získáte stejné výsledky, jaké byste získali, kdybyste skutečně spouštěli jako root. Pomocí fakeroot je bezpečnější:systém stále nemůže dělat nic, co nemůže udělat váš uživatel, takže nepoctivý instalační proces nemůže poškodit váš systém (kromě toho, že se dotknete vašich souborů).

V Debianu byly nástroje pro sestavení vylepšeny, aby to již nevyžadovaly, a můžete sestavovat balíčky bez fakeroot . Toto je podporováno dpkg přímo pomocí Rules-Requires-Root direktiva (viz rootless-builds.txt ).

Abychom pochopili účel fakeroot a bezpečnostní aspekty spuštění jako root nebo ne, může pomoci zvážit účel balení. Při instalaci softwaru ze zdroje pro použití v celém systému postupujte následovně:

  1. sestavte software (což lze provést bez oprávnění)
  2. nainstalujte software (což je třeba provést jako uživatel root nebo alespoň jako uživatel s oprávněním zapisovat do příslušných umístění systému)

Když zabalíte kus softwaru, zdržíte druhou část; ale k úspěšnému provedení je stále třeba „instalovat“ software do balíčku, nikoli do systému. Když tedy zabalíte software, proces se změní na:

  1. sestavte software (bez zvláštních oprávnění)
  2. předstírat instalaci softwaru (opět bez zvláštních oprávnění)
  3. zachyťte instalaci softwaru jako balíček (podobně)
  4. zpřístupnit balíček (podobně)

Nyní uživatel dokončí proces instalací balíčku, kterou je třeba provést jako root (nebo opět uživatel s příslušnými oprávněními pro zápis do příslušných umístění). Zde se realizuje zpožděný privilegovaný proces a je to jediná část procesu, která potřebuje speciální privilegia.

fakeroot pomáhá s kroky 2 a 3 výše tím, že nám umožňuje spouštět procesy instalace softwaru a zaznamenávat jejich chování, aniž bychom museli spouštět jako root.


NE. Falešný root vám umožňuje spouštět nástroje pro manipulaci s oprávněními a reportování, bude hlásit konzistentně. Ve skutečnosti však tato oprávnění neudělí. Bude to jen vypadat, že je máte (falešné). Nezmění to nic mimo prostředí.

Je užitečné, pokud chcete vytvořit adresářovou strukturu, která obsahuje vlastnictví a oprávnění, která nemohla být nastavena vaším uživatelem, kterou pak budete tar, zip nebo jiný balíček.

Není opravdu zvýšit oprávnění, je to falešné. Nedovolí vám dělat nic (mazat, psát, číst), co byste jinak dělat nemohli. Balíček byste (teoreticky) mohli vyrobit i bez něj. Mohli byste dostat falešnou zprávu (ls ) bez něj.

Nejedná se o bezpečnostní chybu, protože není povolit přístup nebo cokoli, co bez něj nemůžete udělat. Běží bez oprávnění. Jediné, co to dá, je zachytit volání na chown , chmod , atd. Dělá z nich žádnou operaci, kromě toho, že zaznamenává, co by se stalo. Zachycuje také volání na stat atd., takže hlásí oprávnění a vlastnictví ze své vlastní interní databáze, jako by byly provedeny ostatní příkazy. To je užitečné, protože pokud pak adresář zazipujete, bude mít falešná oprávnění. Pokud poté rozbalíte jako root, oprávnění se stanou skutečnými.

Všechny soubory, které dříve nebudou čitelné/zapisovatelné, zůstanou nečitelné/zapisovatelné. Jakékoli vytvořené speciální soubory (např. zařízení) nebudou mít žádné zvláštní pravomoci. Jakékoli set-uid (jinému uživateli), soubory nebudou set-uid. Jakákoli jiná eskalace oprávnění nebude fungovat.

Je to typ virtuálního stroje:Virtuální stroj může obecně simulovat jakékoli prostředí/OS, ale nemůže hostiteli udělat nic, co by žádná jiná aplikace nedokázala. Ve virtuálním počítači se můžete zdát, že děláte cokoli. Můžete znovu vynalézt bezpečnostní systém tak, aby byl stejný nebo odlišný. To vše však bude existovat na hostiteli jako prostředky vlastněné uživatelem/skupinou procesu, na kterém běží virtuální prostředí.


Jsou zde již dvě dobré a velmi podrobné odpovědi, ale jen podotýkám, že úvodní odstavec originálu fakeroot manuálová stránka to ve skutečnosti vysvětluje docela jasně a stručně:

fakeroot spustí příkaz v prostředí, kde se zdá, že má oprávnění root pro manipulaci se soubory. To je užitečné pro umožnění uživatelům vytvářet archivy (tar, ar, .deb atd.) se soubory v nich s oprávněními/vlastnictvím root. Bez fakeroot k vytvoření základních souborů archivů se správnými oprávněními a vlastnictvím a jejich následnému zabalení by člověk musel mít oprávnění root, jinak by musel archivy vytvářet přímo, bez použití archivátoru.

Fakeroot umožňuje uživatelům bez oprávnění root vytvářet archivy obsahující soubory vlastněné rootem, což je kritická část generování a distribuce binárních softwarových balíčků v Linuxu. Bez fakeroot , musely by být archivy balíčků generovány při spuštění jako skutečný root, aby obsahovaly správné vlastnictví souborů a oprávnění. To by být bezpečnostním rizikem. Vytváření a balení potenciálně nedůvěryhodného softwaru je obrovským odhalením, pokud se provádí pomocí root priv. Díky fakeroot , nepřivilegovaný uživatel s neprivilegovanými soubory může stále generovat archivy obsahující soubory s vlastnictvím root.

Ale není to bezpečnostní riziko, protože nic v archivu není ve skutečnosti ve vlastnictví uživatele root, dokud nebudou soubory EXTRAKTOVÁNY . A i poté budou soubory extrahovány s nedotčenými kořenovými oprávněními pouze v případě, že to provede privilegovaný uživatel. Tento krok — kde fakeroot -asistovaný archiv obsahující „kořenové“ soubory je extrahován privilegovaným uživatelem — je to místo, kde se „falešný“ kořenový adresář konečně stává skutečným. Do té doby nebyla nikdy získána ani obejita žádná skutečná oprávnění root.

Poznámky

  1. Fakeroot vytvořil několik konkurentů/napodobitelů, kteří se budou vydávat za fakeroot pokud je nainstalován, včetně fakeroot-ng a pseudo . Ale IMHO ani „imitátorova“ manuálová stránka není zdaleka tak jasná, jak se v této otázce dostat přímo k věci. Držte se originálu, jediného fakeroot O.G.
  2. Ostatní distribuce/balící systémy to překonávají tím, že jednoduše ne pomocí vlastnictví root ve svých archivech balíčků. Například ve Fedoře může být software zkompilován, nainstalován a zabalen neprivilegovaným uživatelem bez potřeby fakeroot . Vše se děje v rámci uživatelského $HOME/rpmbuild/ prostor a normálně privilegované kroky jako make install přesměrování (prostřednictvím mechanismů jako --prefix a DESTDIR ) na $HOME/rpmbuild/BUILDROOT/ hierarchie, která by mohla být považována za jakýsi „fakechroot“ prostor (aniž by ve skutečnosti používal fakechroot ).

    Ale i během make install , vše je spouštěno a vlastněno nepřivilegovaným uživatelem. Vlastnictví a oprávnění extrahovaného souboru budou nastaveny na root,root a 0644 (nebo 0755 pro spustitelné soubory) ve výchozím nastavení, pokud není přepsáno v definici balíčku (.spec ), v takovém případě jsou uloženy jako metadata v rámci konečného balíčku. Protože až do (privilegovaného) instalačního procesu balíčku rpm nejsou ve skutečnosti použita žádná oprávnění ani vlastnictví, ani root ani fakeroot je potřeba při balení. Ale fakeroot je ve skutečnosti jen jiná cesta ke stejnému výsledku.


Linux
  1. Jak odstranit soubor root Mails (Mailbox) v Linuxu

  2. Linux – Proč Setuid nefunguje?

  3. Jak v Linuxu nastavím soubor trvale jen pro čtení, aby jej ani root nemohl upravovat?

  1. Jak přizpůsobit uživatelská prostředí Linuxu

  2. Obnovení hesla root na Rocky Linux - Jak na to?

  3. Linux Setuid nefunguje?

  1. Jak monitorovat zabezpečení serveru Linux pomocí Osquery

  2. Jak vytvořit téměř root ekvivalentní uživatele, ale ne root identické uživatele v Linuxu

  3. Linux jak kopírovat, ale nepřepisovat?