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 door LD_PRELOAD naar libfakeroot.so, die wrappers levert rond getuid, chown, chmod, mknod, stat, …, waardoor een nep-rootomgeving wordt gecreëerd. “Ik begrijp dit allemaal niet, je hebt fakeroot 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

  • het is een goed idee, om veiligheidsredenen, om te vermijden dat je als root alles doet wat gedaan zou kunnen worden als normale gebruiker, zelfs als je kunt draaien sudo of su 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 een tar -bestand te maken met de juiste rechten en eigendom, bijvoorbeeld handig bij het verpakken van software.
  • Ik denk dat de opmerking in het fragment van About.com het samenvat: If you don ‘ Als je dit niet begrijpt, heb je fakeroot niet nodig! Als je ‘ niet kunt denken aan een situatie waarin fakeroot is handig, dan heb je ‘ letterlijk niet nodig. Maar mensen die het echt nodig hebben, begrijpen de use-case volledig.

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 die fakeroot 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 (dat fakeroot onderschept en root 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 een rm -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 ; de unlink 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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *