Waarom hebben we het fakeroot
commando überhaupt nodig? Kunnen “we niet gewoon de sudo
of su
commandos gebruiken?
De man-pagina zegt:
fakeroot – voer een commando uit in een omgeving die rootprivileges vervalst voor bestandsmanipulatie
About.com zegt:
Geeft een nep-root omgeving. Dit pakket is bedoeld om iets als:
dpkg-buildpackage -rfakeroot
mogelijk te maken, dwz om de noodzaak om root te worden voor het bouwen van een pakket te verwijderen. Dit wordt gedaan doorLD_PRELOAD
naarlibfakeroot.so
, die wrappers levert rondgetuid
,chown
,chmod
,mknod
,stat
, …, waardoor een nep-rootomgeving wordt gecreëerd. “Ik begrijp dit allemaal niet, je hebtfakeroot
niet nodig!
Mijn vraag is, welke sp eciaal doel lost het op dat een simpele su
of sudo
niet? Om bijvoorbeeld alle geïnstalleerde pakketten in ubuntu opnieuw in te pakken, geven we het volgende commando:
$ fakeroot -u dpkg-repack `dpkg --get-selections | grep install | cut -f1`
Kunnen we het bovenstaande commando doen met sudo of su in plaats van fakeroot zoals dit:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
BEWERKEN:
Running:
$ sudo dpkg-repack `dpkg --get-selections | grep install | cut -f1`
geeft me deze foutmelding:
control directory heeft slechte rechten 700 (moet> = 0755 en < = 0775)
Is er een reden waarom?
Reacties
Answer
Stel je voor dat je dat bent een ontwikkelaar / pakketbeheerder, enz. die op een externe server werkt. U wilt de inhoud van een pakket bijwerken en opnieuw opbouwen, een kernel downloaden en aanpassen van kernel.org en het bouwen, enz. Terwijl u deze dingen probeert te doen, zult u ontdekken dat u voor sommige stappen root
rechten (UID
en GID
0) om verschillende redenen (beveiliging, over het hoofd geziene rechten, enz.). Maar het is niet mogelijk om root
rechten te krijgen, aangezien u op een externe machine werkt (en veel andere gebruikers hebben hetzelfde probleem als u). Dit is precies wat fakeroot
doet het: het doet alsof het een effectieve UID
en GID
van 0 is voor de omgeving die ze vereist.
In de praktijk krijg je nooit echte root
privileges (in tegenstelling tot su
en sudo
die u noemt).
Reacties
- dus ik kan ‘ geen om systeeminstellingen te wijzigen ?? omdat het commando dat we ‘ ll draaien zal denken dat het ‘ s als root draait en doet wat we willen. won ‘ t it?
- @mrid Let op de ” In de praktijk krijg je nooit echte root-privileges “. Dus het antwoord is nee
Answer
Om duidelijk het verschil te zien tussen fakeroot en een echte sudo / su, doe gewoon:
$ 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
Zolang je in de fakeroot-shell bent, lijkt het alsof je root bent – zolang je maar niets probeert dat echt root-privileges nodig heeft. En dit is precies wat een verpakkingstool nodig heeft om pakketten te maken die op elke machine passen.
In feite, als je fakeroot gebruikt voor het verpakken, wil je bereiken dat de tools die je onder fakeroot draait ervoor zorgen dat je bestanden zien als eigendom van root. Niets meer niets minder. Dus in feite zullen su of sudo niet werken om het juiste bestandseigendom te verkrijgen.
Reacties
- Is faker niet gevaarlijk? Als ik een bestand maak met de suid bit en rx perm, dan wordt het bestand aangemaakt en het is eigendom van root en kan door iedereen worden uitgevoerd als root! Of werkt het instellen van het suid-bit misschien niet?
- Niet goed. Ik heb dit zelf uitgeprobeerd. De belangrijkste reden voor fakeroot is om ownership root: root in ingebouwde pakketten te krijgen zonder daadwerkelijk root te zijn. geïnstalleerde pakketten zullen de juiste perms hebben.
- Het was allemaal erg verwarrend totdat ik de opmerking van @ ntzrmtthihu777 ‘ s commentaar las!
- Sorry, Ik begrijp de beschrijving niet ‘. Waarom patcht je de tools niet zodat ze ‘ niet klagen als je geen root bent? Als een gerelateerde vraag: de bestanden die u aanmaakt onder fakeroot zijn tenslotte niet eigenlijk eigendom van root. Zou dit niet ‘ betekenen dat wanneer ik zon
.deb
-bestand installeer, al mijn/usr
bestanden zijn eigendom van de gebruiker diefakeroot
heeft genoemd? - @ JohannesSchaub-litb, nee dat ‘ het punt is. De bestanden zijn geen eigendom van root, maar bevinden zich in een
fakeroot
shell, ze zien eruit alsof ze zijn. Wanneer het .deb-pakket in deze shell wordt gemaakt, wordt de bestandseigenaar gelezen uit het bestandssysteem (datfakeroot
onderschept enroot
retourneert) en opgeslagen in de verpakking. Bij het installeren van het pakket heeft dpkg dan root-toegang nodig, omdat het pakket aangeeft dat het bestand eigendom moet zijn van root.
Answer
Omdat de antwoorden moeilijk te begrijpen zijn (voor mijzelf) en ik er even over heb nagedacht om het te begrijpen ( deze opmerking deed me het begrijpen), “m gaat een hopelijk betere uitleg geven.
1. Wat gebeurt er in fakeroot
Niets meer dan wat er gebeurt met je eigen gebruiker. Absoluut niets meer. Als je fakeroot
(die bij het aanroepen een nieuwe shell geeft, zoals sudo
zou doen), doe alsof je dingen doet waarvoor je toestemming nodig had, en sluit af, er zou absoluut niets gebeuren.
Als je erover nadenkt, is het een totale verspilling van tijd. Waarom zou je dingen doen die niet echt gebeuren? Het is krankzinnig. Je had er eenvoudigweg niets van kunnen doen en er zou geen verschil zijn geweest, aangezien er geen spoor van is.
Wacht even …
2. Het spoor van fakeroot
Er zou een spoor over kunnen zijn van fakeroot
. Laten we eens kijken naar de commandos in MortenSickel” s antwoord dat best aardig is en een upvote verdient:
$ 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
Op het eerste gezicht lijkt het erop het gebruik van fakeroot
was een totale tijdverspilling. Als je fakeroot
niet had gebruikt, zou je uiteindelijk hetzelfde hebben ding.
Het subtiele hier is dit:
$ cat root.tst Wow I have root access
Wat betekent dat de inhoud van het bestand zich nog steeds herinnert dat het een root is. Je zou kunnen zeggen dat het niet gebruiken van fakeroot
dezelfde resultaten zou hebben opgeleverd. Je hebt gelijk, dit voorbeeld is te simpel.
Laten we nog een voorbeeld nemen:
$ 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
Laten we eens kijken wat er is gebeurd. Ik deed alsof ik root
was, wat totaal niet effectief is, en creëerde x
en y
. Ik deed alsof x
behoorde tot myuser
en y
tot root
. Ze behoren eigenlijk allebei tot myuser
(zoals we uiteindelijk kunnen zien), maar ik deed net alsof het zo was.
Vervolgens heb ik een lijst gemaakt en mijn fantasie in een bestand opgeslagen. Als ik later weer naar het bestand kijk, kan ik zien van wie ik dacht dat de bestanden eigendom zouden moeten zijn. Nogmaals, ze zijn niet echt eigendom van mensen die ik me had voorgesteld, ik stelde me dat gewoon voor.
3. Dus … Waarom wil je dat nog een keer?
Je zou kunnen zeggen dat ik niet echt hoefde nep te zijn root te zijn om die vermelding te maken. Ik had gewoon de vermelding kunnen maken en deze vervolgens kunnen bewerken om weer te geven mijn fantasie. Je hebt gelijk, daarvoor had je fakeroot
niet nodig. In feite, wetende dat fakeroot
eigenlijk niets doet, kun je “mogelijk geen enkele vaardigheid hebben verworven die je eerder niet had.
Maar , en dit is waar het bij fakeroot
om draait, het bewerken van de lijst kan niet triviaal zijn.Zoals het is met een pakket dat op uw systeem kan worden geïnstalleerd, heeft u een tar
ed, gzip
ed, xz
ed, bzip2
ed of een ander formaat dat uw bestanden bij elkaar houdt en hun toestemmingen en eigenaren onthoudt. Kunt u het gecomprimeerde bestand gemakkelijk wijzigen en het eigendom van een bestand bewerken? Ik weet niets over jou, maar ik kan geen manier bedenken.
Zou er een tool kunnen zijn die, als alles eenmaal is gecomprimeerd, het gecomprimeerde bestand aanpast en programmatisch de eigendommen en rechten aanpast ? Ja dat kan. U kunt dus ofwel de eigendommen vervalsen voordat u ze comprimeert, of ze daarna wijzigen. Debian-mensen besloten dat het eerste gemakkelijker is.
4. Waarom gebruik je niet gewoon sudo
?
Allereerst heb je geen rootprivileges nodig om software te bouwen en je hebt ook geen rootprivileges nodig om ze te comprimeren. Dus als je het niet nodig hebt, moet je echt een Windows-gebruiker zijn om er zelfs maar aan te denken die toestemming te krijgen. Maar afgezien van sarcasme, heb je misschien niet eens een root-wachtwoord.
Bovendien, laten we zeggen dat je root-rechten hebt. En laten we zeggen dat je wilt doen alsof een bestand alleen leestoegang tot de wortel. Dus je sudo
, verander eigenlijk de bestandseigenaar en permissies in root
, je verlaat de rootshell en probeert alles te verpakken. Je faalt omdat je het bestand nu niet meer kunt lezen omdat je geen root-toegang hebt. Dus je moet sudo
comprimeren en het pakket als root bouwen. In feite moet je doen alles als root.
Dit is slecht TM .
Als packager heb je geen rootrechten nodig en zou je het ook niet moeten krijgen. je een pakket installeert, moet je misschien een bestand (A
) als root installeren en daarvoor heb je rootrechten nodig. Alles wat fakeroot
doet, is dit mogelijk maken. Het laat de packager-lijst A
toe als eigendom van root voor de archiver, zodat wanneer het pakket door de gebruiker wordt uitgepakt, de archiver root-toestemming vraagt en A
zoals eigendom van root.
Reacties
- Uitstekende beschrijving, dit maakt het duidelijk.
-
So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier.
Dit hielp me terwijl ik bleef denken ‘ waarom zou je het daarna niet wijzigen? ‘. - Bedankt, dit lost de verwarring op die ik had na het lezen van @Morten ‘ s antwoord
Antwoord
AFAIK, fakeroot voert een commando uit in een omgeving waarin het root-privileges lijkt te hebben voor bestandsmanipulatie. Dit is handig om gebruikers in staat te stellen archieven (tar, ar, .deb etc.) te maken met bestanden erin met rootrechten / eigendom. Zonder fakeroot zou men root-privileges nodig hebben om de samenstellende bestanden van de archieven te creëren met de juiste permissies en eigendom, en ze dan inpakken, of men zou de archieven direct moeten construeren, zonder de archiver te gebruiken.
fakeroot werkt door de bibliotheekfuncties voor bestandsmanipulatie (chmod (), stat () enz.) te vervangen door functies die het effect simuleren dat de echte bibliotheekfuncties zouden hebben gehad als de gebruiker echt root was geweest.
Samenvatting:
fakeroot [-l|--lib library] [--faked faked-binary] [--] [command]
Bekijk hier meer: fakeroot
Reacties
- @MaskTheSmokin: Dus fakeroot geeft je supergebruikerskracht alleen voor bewerkingen voor bestandsmanipulatie, toch.
- Het geeft niet echt supergebruikerskracht, het vervalst het alleen – het programma dat erin draait denkt dat het root-privileges heeft, terwijl het in werkelijkheid nog steeds de normale privileges van de gebruiker ‘ gebruikt.
- Waar is het verschil tussen
the program running in it thinks it has root privileges
en het programma met rootrechten? Als ik eenrm -rf /
en het programma kan uitvoeren, denk ik dat ik root-privileges heb … - @userunknown Misschien kun je
rm
‘ controleer of je voldoende rechten hebt, maar de kernel zelf zou het niet ‘ laten doen ; deunlink
systeemaanroep zou mislukken. Het ‘ is niet alleen aan de applicatie om de permissies af te handelen, of je ‘ zou je eigen applicatie kunnen schrijven die niet ‘ t controleer permissies en doe er mee wat je wilt - Een voorbeeld om de behoefte aan
fakeroot
toe te lichten zou fantastisch zijn. Ik kan het gebruik van fakeroot zien, maar ik begrijp niet ‘ waarom mensen ‘ geen rootrechten kunnen omzeilen tot het punt dat het ‘ is gemakkelijker te vervalsen.
Answer
Ik heb het gebruikt voor scripts voor het bouwen van pakketten. Ik wist niet zeker of de persoon die de script heeft toegang op rootniveau, maar het script moest nog steeds, bijvoorbeeld, een tar-bestand genereren dat bestanden bevat die tot root behoren. De eenvoudigste manier om dit te doen was het script voor het maken van pakketten uitvoeren onder fakeroot, waardoor de archiver werd misleid door te geloven dat de bestanden behoren tot de root, en verpakt ze als zodanig in het archief. Op deze manier, toen het pakket werd uitgepakt op de doelcomputer (op een totaal andere machine), waren de bestanden niet van rare of niet-bestaande gebruikers. / p>
Als ik erover nadenk, was de enige plaats waar ik dit heb gezien het bouwen van een soort archief: rootfs van ingebedde systemen, tar.gz-archieven, rpm-pakketten, .deb-pakketten, enz.
Reacties
-
fakeroot
is een tijdelijke oplossing voor verpakkingssoftware met fouten: er is geen reden waarom je root moet zijn om dergelijke pakketten, b ut aangezien ze je geen ‘ toestaan om bestandsrechten op een andere manier te specificeren dan ze direct in het bestandssysteem in te stellen voordat je handen hebt, heb je geen keus
Antwoord
Een veelgebruikt gebruik is om erachter te komen tot welke bestanden een falend binair bestand echt toegang wilde hebben. Dat wil zeggen, het vinden en oplossen van bugs veroorzaakt door hard gecodeerde paden en onjuiste afhandeling van uitzonderingen.
Antwoord
U kunt gebruik fakeroot zonder echt root-privileges te hebben. Als je su
en / of sudo
had gehad, zou je je systeem kunnen vernietigen met een simpele rm -rf /
, maar met fakeroot zou je hoogstens je homedirectory verwijderen.
Reacties
- Dat niet ‘ t uitleggen de noodzaak van
fakeroot
. U kunt uw homedirectory verwijderen als uzelf.
Answer
Het simpele antwoord:
su en sudo voeren commandos uit als root. fakeroot doet dat niet, buiten zijn gedeeltelijke sandbox-indeling.
sudo
ofsu
omdat het uw machine is.fakeroot
heeft twee toepassingen 1) het houdt programmas voor de gek door te geloven dat je inderdaad een rootgebruiker bent, wat sommige slecht geschreven propriëtaire software nodig kan hebben, zelfs als deze niet nodig is (meestal is de Windows-ontwikkelaar overgegaan op Linux) en 2) het staat het emuleren van bestandsmodus en eigendomsveranderingen toe die je anders niet ‘ zou kunnen doen, voornamelijk om eentar
-bestand te maken met de juiste rechten en eigendom, bijvoorbeeld handig bij het verpakken van software.fakeroot
niet nodig! Als je ‘ niet kunt denken aan een situatie waarinfakeroot
is handig, dan heb je ‘ letterlijk niet nodig. Maar mensen die het echt nodig hebben, begrijpen de use-case volledig.