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ímLD_PRELOAD
tolibfakeroot.so
, který poskytuje obálky kolemgetuid
,chown
,chmod
,mknod
,stat
, …, čímž vytvoříte falešné kořenové prostředí. Pokud ne „Tomu nerozumím, nepotřebujetefakeroot
!
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
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 jmenujefakeroot
? - @ 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 programrm -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í.
sudo
nebosu
, 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řittar
soubor se správnými oprávněními a vlastnictví, užitečné například při balení softwaru.fakeroot
! Pokud ‚ nemyslíš na situaci, kdyfakeroot
je užitečné, pak ho doslova