Proč vůbec potřebujeme příkaz fakeroot? Nemůžeme jednoduše použít příkazy sudo nebo su?

Manuální stránka říká:

fakeroot – spusťte příkaz v prostředí, který předstírá oprávnění root pro manipulaci se soubory

About.com říká:

Poskytuje falešný kořen prostředí. Tento balíček má umožnit něco jako: dpkg-buildpackage -rfakeroot tj. odstranit potřebu stát se rootem pro sestavení balíčku. To se provádí nastavením LD_PRELOAD to libfakeroot.so, který poskytuje obálky kolem getuid, chown, chmod, mknod, stat, …, čímž vytvoříte falešné kořenové prostředí. Pokud ne „Tomu nerozumím, nepotřebujete fakeroot!

Moje otázka je, co sp ecial účel to řeší, že jednoduché su nebo sudo don „t? Například pro opětovné zabalení všech nainstalovaných balíčků v ubuntu dáme následující příkaz:

$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

Můžeme udělat výše uvedený příkaz sudo nebo su místo fakeroot takto:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

EDIT:

Spuštěno:

$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1` 

mi dává tuto chybu:

ovládací adresář má špatná oprávnění 700 (musí být> = 0755 a < = 0775)

Nějaký důvod proč?

Komentáře

  • je z bezpečnostních důvodů dobrý nápad vyhnout se jako root všemu, co by bylo možné udělat jako normální uživatel, i když můžete spustit sudo nebo su, protože je to váš stroj. fakeroot má dvě použití 1) podvádí programy tak, že věří, že jste skutečně root, což může nějaký špatně napsaný proprietární software vyžadovat, i když to není potřeba (obvykle vývojář Windows pro Linux) a 2) umožňuje emulovat režim souboru a změny vlastnictví, které byste ‚ jinak nebyli schopni, hlavně vytvořit tar soubor se správnými oprávněními a vlastnictví, užitečné například při balení softwaru.
  • Myslím, že poznámka ve výňatku z webu About.com to shrnuje: Pokud ne ‚ Nerozumím ničemu z toho, nepotřebuješ fakeroot! Pokud ‚ nemyslíš na situaci, kdy fakeroot je užitečné, pak ho doslova

nepotřebujete. Ale lidé, kteří to skutečně potřebují, zcela rozumí případu použití.

Odpověď

Představte si, že jste vývojář / správce balíčků atd. pracující na vzdáleném serveru. Chcete aktualizovat obsah balíčku a znovu jej sestavit, stáhnout a přizpůsobit jádro z kernel.org a vytvořit jej atd. Při pokusu o tyto věci zjistíte, že některé kroky vyžadují, abyste měli root práva (UID a GID 0) z různých důvodů (zabezpečení, přehlédnutá oprávnění atd.). Není však možné získat root práva, protože pracujete na vzdáleném počítači (a mnoho dalších uživatelů má stejný problém jako vy). Přesně to je fakeroot ano: předstírá efektivní UID a GID 0 prostředí, které je vyžaduje.

V praxi nikdy nezískáte skutečná root oprávnění (na rozdíl od su a sudo, který zmiňujete).

Komentáře

  • takže nemohu ‚ použít změnit nastavení systému ?? protože příkaz, který ‚ spustíme, si bude myslet, že ‚ běží jako root a dělá, co chceme. nevyhrál ‚ to?
  • @mrid Všimněte si “ V praxi nikdy nezískáte skutečná práva root „. Anwser tedy není

odpověď

Chcete-li jasně vidět rozdíl mezi fakeroot a skutečným sudo / su, prostě udělejte:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

Pokud jste ve skořápce fakeroot, vypadá to, že pokud jste root – pokud se nepokoušíte nic dělat to opravdu potřebuje oprávnění root. A to je přesně to, co obalový nástroj potřebuje k výrobě obalů, které budou mít smysl na jakémkoli stroji.

Když ve skutečnosti používáte fakeroot pro balení, čeho chcete dosáhnout, je vytvořit nástroje spuštěné pod fakeroot, aby vaše soubory byly vlastněny rootem. Nic víc nic míň. Takže ve skutečnosti nebude su nebo sudo fungovat pro získání správného vlastnictví souboru.

Komentáře

  • Není to podvodník nebezpečný? Pokud vytvořím soubor s bitem suid a rx perm, soubor bude vytvořen ve vlastnictví root, spustitelný kýmkoli, jako root! Nebo možná nastavení bitů suid nebude fungovat?
  • To není dobré. Zkoušel jsem to sám. Primárním důvodem pro fakeroot je získání vlastnictví root: root do vestavěných balíčků, aniž byste byli rootem. nainstalované balíčky však budou mít správné povolení.
  • Bylo to velmi matoucí, dokud jsem si přečetl komentář @ ntzrmtthihu777 ‚!
  • Omlouvám se, Nerozumím popisu ‚. Proč nástroje neopravit tak, aby si ‚ stěžovali, pokud nejste root? Jako související otázka: Koneckonců, soubory, které vytvoříte pod fakeroot, nejsou ve skutečnosti vlastnictvím root. Nebylo by to ‚ to, že když nainstaluji takový .deb soubor, všechny mé /usr soubory vlastní kdokoli, kdo se jmenuje fakeroot?
  • @ JohannesSchaub-litb, o to ‚ jde. Soubory nevlastní root, ale uvnitř fakeroot prostředí vypadají tak, jak jsou. Když se v tomto prostředí vytvoří balíček .deb, načte se vlastník souboru ze systému souborů (který fakeroot zachytí a vrátí root) a uloženy v balíčku. Při instalaci balíčku pak dpkg vyžaduje přístup root, protože balíček naznačuje, že soubor by měl vlastnit root.

Odpovědět

Vzhledem k tomu, že odpovědi jsou těžko srozumitelné (mi samým) a pochopení bylo zapotřebí (přemýšlení mi tento komentář pomohl pochopit), proto jsem dáme snad lepší vysvětlení.

1. Co se stane ve fakeroot

Nic víc než to, co se stane s vaším vlastním uživatelem. Absolutně nic víc. Pokud fakeroot (který vám při volání poskytne nový shell, jako by to bylo sudo), předstírat, že děláte věci, pro které jste potřebovali povolení, a ukončit, absolutně by se nic nestalo.

Pokud o tom přemýšlíte, je to úplná ztráta času. Proč bys dělal věci, které se ve skutečnosti nestanou? Je to šílené. Mohli jste jednoduše nic z toho neudělat a nebyl by žádný rozdíl, protože po tom není ani stopy.

Počkejte chvíli …

2. Trasa fakeroot

Z fakeroot může zůstat stopa. Pojďme se podívat na příkazy v Odpověď MortenSickel , která je docela pěkná a zaslouží si podporu:

$ fakeroot # echo "Wow I have root access" > root.tst # ls -l root.tst -rw-rw-r-- 1 root root 23 Oct 25 12:13 root.tst # ls -l /root ls: cannot open directory /root: Permission denied # exit $ ls -l root.tst -rw-rw-r-- 1 ubuntu ubuntu 23 Oct 25 12:13 root.tst 

Na první pohled to vypadá, že použití fakeroot bylo naprostou ztrátou času. Nakonec, pokud byste nepoužili fakeroot, dostali byste to samé věc.

Jemná věc je tato:

$ cat root.tst Wow I have root access 

Což znamená, že obsah souboru si stále pamatuje, že je root. Můžete říci, že nepoužití fakeroot by přineslo stejné výsledky. Máte pravdu, tento příklad je příliš jednoduchý.

Vezměme si další příklad:

$ fakeroot # touch x # touch y # chown myuser:myuser x # ls -l > listing # exit $ ls -l total 4 -rw-rw-r-- 1 myuser myuser 152 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 y $ cat listing total 0 -rw-rw-r-- 1 root root 0 Jan 7 21:39 listing -rw-rw-r-- 1 myuser myuser 0 Jan 7 21:39 x -rw-rw-r-- 1 root root 0 Jan 7 21:39 y 

Podívejme se, co se stalo. Předstíral jsem, že jsem root, což je naprosto neúčinné, a vytvořil jsem x a y. Předstíral jsem, že x patří do myuser a y do root. Ve skutečnosti oba patří do myuser (jak vidíme na konci), ale jen jsem předstíral , že to tak je.

Poté jsem vytvořil výpis a uložil svou představivost do souboru. Později, když se podívám zpět na soubor, vidím, komu jsem si představoval, že by soubory měly vlastnit. Opět platí, že ve skutečnosti nejsou ve vlastnictví lidí, které jsem si představoval, prostě jsem si to jen představoval.

3. Takže … Proč to chcete znovu?

Můžete říci, že k vytvoření seznamu jsem opravdu nemusel předstírat, že jste root. Mohl jsem jednoduše vytvořit seznam a poté jej upravit tak, aby odrážel má představivost. Máte pravdu, nepotřebovali jste fakeroot. Ve skutečnosti, když víte, že fakeroot vlastně nedělá nic, nemůžete získat žádnou schopnost, kterou jste dříve neměli.

Ale a o to fakeroot jde, úprava seznamu nemusí být jednoduchá.Jelikož je to balíček, který lze do systému nainstalovat, máte tar ed, gzip ed, xz ed, bzip2 ed nebo jakýkoli jiný formát, který udržuje vaše soubory pohromadě a pamatuje si jejich oprávnění a vlastníky. Můžete snadno upravit komprimovaný soubor a upravit vlastnictví souboru? Nevím o vás, ale nemohu vymyslet nějaký způsob.

Mohl by být vytvořen nástroj, který po komprimaci vše upraví komprimovaný soubor a programově upraví vlastnictví a oprávnění ? Ano, mohlo. Před komprimací můžete buď předstírat vlastnictví, nebo je poté změnit. Lidé v Debianu se rozhodli, že první je jednodušší.

4. Proč nepoužívat sudo?

Nejprve nepotřebujete oprávnění root k vytváření softwaru a nepotřebujete oprávnění root k jejich komprimaci. Pokud to tedy nepotřebujete, musíte být skutečně uživatelem systému Windows, abyste vůbec mohli toto povolení získat. Ale sarkasmus stranou, možná nemáte ani heslo uživatele root.

Kromě toho řekněme, že máte oprávnění uživatele root. Řekněme, že chcete předstírat, že by soubor měl mít přístup pouze ke čtení vykořenit. Takže sudo ve skutečnosti změníte vlastníka souboru a oprávnění na root, vyjdete z kořenového shellu a pokusíte se vše zabalit. Propadnete, protože nyní již nemůžete soubor číst, protože nemáte přístup root. Musíte tedy sudo a zkomprimovat a vytvořit balíček jako root. Efektivně musíte udělat vše jako root.

To je špatné TM .

Jako balírna nepotřebujete oprávnění root a neměli byste ji získat. Když instalujete balíček, možná budete muset nainstalovat nějaký soubor (A) jako root a tam budete potřebovat oprávnění root. Vše, co fakeroot dělá, je umožnit to. Umožňuje seznam balíren A ve vlastnictví root pro archivátor, takže když je balíček dekomprimován uživatelem, vyžaduje archivátor oprávnění root a vytvoří A ve vlastnictví root.

Komentáře

  • Vynikající zápis, to je jasné.
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. To mi pomohlo, protože jsem stále přemýšlel ‚ proč to nezměnit po? ‚.
  • Díky, tím se odstraní zmatek, který jsem měl po přečtení zprávy @Morten ‚ s

odpověď

AFAIK, fakeroot spouští příkaz v prostředí, kde se zdá, že má root oprávnění 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 by člověk musel mít oprávnění root, aby mohl vytvářet soubory složek archivu se správnými oprávněními a vlastnictvím, a pak je zabalit, jinak by musel archivy postavit přímo, bez použití archivátoru.

fakeroot funguje tak, že nahradí funkce knihovny pro manipulaci se soubory (chmod (), stat () atd.) takovými, které simulují účinek, jaký by měly skutečné funkce knihovny, kdyby byl uživatel skutečně root.

Synopse:

 fakeroot [-l|--lib library] [--faked faked-binary] [--] [command] 

Další informace najdete zde: fakeroot

Komentáře

  • @MaskTheSmokin: Takže fakeroot vám dává superuživatelský výkon pouze pro operace manipulace se soubory, správně.
  • Opravdu to nedává superuživatelská síla, pouze ji předstírá – program, který v ní běží, si myslí, že má oprávnění root, zatímco ve skutečnosti stále používá běžná oprávnění uživatele ‚.
  • Jaký je rozdíl mezi the program running in it thinks it has root privileges a programem, který má oprávnění root? Pokud zvládnu program rm -rf / a jeho spuštění si myslí, že mám oprávnění root …
  • @userunknown Možná budete moci rm ‚ zkontrolujte, zda máte dostatečná oprávnění, ale samotné jádro by to ‚ nenechalo udělat ; unlink systémové volání by selhalo. To ‚ není na samotné aplikaci, aby zvládla oprávnění, nebo ‚ byste mohli napsat vlastní aplikaci, která ‚ Zkontrolovat oprávnění a dělat s nimi, co chcete
  • Příklad k objasnění potřeby fakeroot by byl fantastický. Vidím využití fakeroot, ale nechápu ‚ proč lidé nemohou ‚ obejít oprávnění root do té míry, že to ‚ je snazší jej předstírat.

Odpověď

Použil jsem ho pro vytváření skriptů pro vytváření balíčků. Nebyl jsem si jistý, zda osoba, která běží skript má přístup na úrovni root, ale skript stále potřeboval vygenerovat, řekněme, soubor tar, který obsahoval soubory, které patří root. Nejjednodušší způsob, jak to udělat, bylo spustit skript pro vytváření balíčků pod fakeroot, který přiměl archivátora k přesvědčení, že soubory patří rootovi a zabalily je jako takové do archivu. Tímto způsobem, když byl balíček rozbalen do cílového počítače (celkem na jiném počítači), soubory nepatřily divným nebo neexistujícím uživatelům.

Když o tom přemýšlím, jediné místo, které jsem viděl, bylo vytváření nějakého archivu: rootfs vestavěných systémů, archivy tar.gz, balíčky rpm, balíčky .deb atd.

Komentáře

  • fakeroot je alternativní nástroj pro odposlouchávaný obalový software: není důvod, abyste pro vytváření museli být root takové balíčky, b protože vám ‚ neumožňují určit oprávnění k souborům jiným způsobem, než je nastavit přímo do souborového systému dříve, než máte ruce,

Odpověď

Běžným zvykem je zjistit, ke kterým souborům skutečně chtěla mít přístup binární soubor, který selhal. To znamená, hledat a opravovat nebo obcházet chyby způsobené pevně zakódovanými cestami a nesprávným zpracováním výjimek.

Odpovědět

Můžete používat fakeroot, aniž byste měli oprávnění root. Pokud byste měli su a / nebo sudo schopni zničit váš systém jednoduchým rm -rf /, ale maximálně s fakerootem byste odstranili domovský adresář.

Komentáře

  • To však ‚ t vysvětluje potřebu fakeroot. Domovský adresář můžete odebrat jako sami.

Odpovědět

Jednoduchá odpověď:

su a sudo spouští příkazy jako root. fakeroot ne, mimo jeho částečné sandboxové uspořádání.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *