Perché abbiamo bisogno del comando fakeroot? Non possiamo semplicemente usare i comandi sudo o su?

La pagina man dice:

fakeroot – esegui un comando in un ambiente falsificando i privilegi di root per manipolazione di file

About.com dice:

Fornisce una radice falsa ambiente. Questo pacchetto ha lo scopo di abilitare qualcosa come: dpkg-buildpackage -rfakeroot cioè per rimuovere la necessità di diventare root per la creazione di un pacchetto. Ciò viene fatto impostando LD_PRELOAD a libfakeroot.so, che fornisce wrapper intorno a getuid, chown, chmod, mknod, stat, …, creando così un falso ambiente di root. Se non lo fai “Non capisco niente di tutto questo, non hai bisogno di fakeroot!

La mia domanda è: cosa sp scopo eciale risolve che un semplice su o sudo non “t? Ad esempio, per reimballare tutti i pacchetti installati in ubuntu diamo il seguente comando:

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

Possiamo eseguire il comando precedente con sudo o su invece di fakeroot in questo modo:

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

MODIFICA:

In esecuzione:

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

mi dà questo errore:

la directory di controllo ha permessi non validi 700 (deve essere> = 0755 e < = 0775)

Qualche motivo?

Commenti

  • è una buona idea, per ragioni di sicurezza, evitare di fare da root tutto ciò che potrebbe essere fatto come normale utente, anche se puoi eseguire sudo o su perché è la tua macchina. fakeroot ha due usi 1) inganna i programmi facendogli credere che tu sia davvero un utente root, cosa che alcuni software proprietari scritti male potrebbero richiedere anche se non necessari (di solito lo sviluppatore Windows è diventato Linux) e 2) consente lemulazione della modalità file e delle modifiche alla proprietà che ‘ non saresti in grado di fare altrimenti, principalmente per creare un file tar con i permessi corretti e proprietà, utile ad esempio quando si crea un pacchetto di software.
  • Penso che la nota nellestratto di About.com lo riassuma: Se non ‘ Per capire tutto questo, non è necessario fakeroot! Se puoi ‘ non pensare a una situazione in cui fakeroot è utile, quindi letteralmente non ‘ ne hai bisogno. Ma le persone che in realtà ne hanno bisogno capiscono completamente il caso duso.

Risposta

Immagina di essere uno sviluppatore / manutentore di pacchetti, ecc. che lavora su un server remoto. Vuoi aggiornare il contenuto di un pacchetto e ricostruirlo, scaricare e personalizzare un kernel da kernel.org e compilarlo, ecc. Mentre provi a fare queste cose, scoprirai che alcuni passaggi richiedono di avere root diritti (UID e GID 0) per diversi motivi (sicurezza, autorizzazioni ignorate, ecc.). Ma non è possibile ottenere i diritti di root, poiché stai lavorando su una macchina remota (e molti altri utenti hanno il tuo stesso problema). Questo è esattamente ciò che fakeroot fa: finge un UID e GID efficace di 0 per lambiente che li richiede.

In pratica non si ottengono mai root privilegi (al contrario di su e sudo che hai menzionato).

Commenti

  • quindi, posso ‘ t usare per modificare le impostazioni di sistema ?? perchè il comando che ‘ eseguiremo penserà che ‘ sia in esecuzione come root e faccia quello che vogliamo che faccia. vinto ‘ t it?
  • @mrid Nota il ” In pratica non ottieni mai veri privilegi di root “. Quindi la risposta è no

Risposta

Per vedere chiaramente la differenza tra fakeroot e un vero sudo / su, fallo e basta:

$ 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 

Finché sei allinterno della shell fakeroot, sembra che tu sia root – purché non provi a fare nulla che ha davvero bisogno dei privilegi di root. E questo è esattamente ciò di cui ha bisogno uno strumento di packaging per creare pacchetti che abbiano senso su qualsiasi macchina.

In effetti, quando usi fakeroot per il packaging, ciò che vuoi ottenere è fare in modo che gli strumenti che esegui sotto fakeroot vedano i tuoi file come di proprietà di root. Niente di più, niente di meno. Quindi, in effetti, su o sudo non funzioneranno per ottenere la giusta proprietà del file.

Commenti

  • Il falso non è pericoloso? Se creo un file con il bit suid e rx perm, il file verrà creato di proprietà di root, eseguibile da chiunque, come root! O forse limpostazione del bit suid non funziona?
  • Non va bene. Lho provato io stesso. La ragione principale per fakeroot è ottenere la proprietà root: root nei pacchetti compilati senza essere effettivamente root. i pacchetti installati avranno perms adeguati, però.
  • Era tutto molto confuso finché non ho letto il commento di @ ntzrmtthihu777 ‘!
  • Scusa, Non ‘ capisco la descrizione. Perché non patchare gli strumenti in modo che ‘ non si lamentino se non sei root? Come domanda correlata: dopo tutto, i file che crei sotto fakeroot non sono effettivamente di proprietà di root. ‘ non implica che quando installo un tale file .deb, tutti i miei /usr i file sono di proprietà di qualsiasi utente chiamato fakeroot?
  • @ JohannesSchaub-litb, no che ‘ è il punto. I file non sono di proprietà di root, ma allinterno di una shell fakeroot, sembrano che lo siano. Quando il pacchetto .deb viene creato allinterno di questa shell, il proprietario del file viene letto dal file system (che fakeroot intercetta e restituisce root) e conservato nella confezione. Quando si installa il pacchetto, dpkg richiede quindi laccesso come root perché il pacchetto indica che il file dovrebbe essere di proprietà di root.

Risposta

Poiché le risposte sono difficili da capire (a me stesso) e ci è voluto un po di riflessione per capirle ( questo commento me lo ha fatto capire), io “m spero di dare una spiegazione migliore.

1. Cosa succede in fakeroot

Nientaltro che ciò che accade con il tuo utente. Assolutamente niente di più. Se fakeroot (che quando viene chiamato ti dà una nuova shell, come sudo), finge di fare cose per cui hai bisogno del permesso ed esce, assolutamente non succederebbe nulla.

Se ci pensi, “è una totale perdita di tempo. Perché dovresti fare cose che in realtà non succederanno? È folle. Avresti potuto semplicemente non farlo e non ci sarebbe stata alcuna differenza, dato che non ce nè traccia.

Aspetta un minuto …

2. La traccia di fakeroot

potrebbe essere una traccia a sinistra di fakeroot. Esaminiamo i comandi in MortenSickel” la risposta che è piuttosto carina e merita un voto positivo:

$ 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 

A prima vista, sembra aver utilizzato fakeroot è stata una totale perdita di tempo. Alla fine, se non avessi “usato fakeroot, avresti ottenuto lo stesso cosa.

La cosa sottile qui è questa:

$ cat root.tst Wow I have root access 

Il che significa che il contenuto del file ricorda ancora di essere una radice. Potresti dire che non utilizzare fakeroot avrebbe prodotto gli stessi risultati. Hai ragione, questo esempio è troppo semplice.

Facciamo un altro esempio:

$ 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 

Vediamo cosa è successo. Ho finto di essere root, che è totalmente inefficace, e ho creato x e y. Ho finto x di appartenere a myuser e y di appartenere a root. In realtà appartengono entrambi a myuser (come possiamo vedere alla fine), ma ho solo fatto finta che fosse così.

Quindi ho creato un elenco e ho salvato la mia immaginazione in un file. Più tardi, quando guardo indietro al file, posso vedere a chi immaginavo dovessero essere di proprietà dei file. Ancora una volta, non sono effettivamente di proprietà di persone che immaginavo, lho semplicemente immaginato.

3. Quindi … Perché lo vuoi di nuovo?

Potresti dire che non avevo davvero bisogno di fingere di essere root per creare quellelenco. Avrei potuto semplicemente creare lelenco, quindi modificarlo per riflettere la mia immaginazione. Hai ragione, non avevi bisogno di fakeroot per questo. In effetti, sapendo che fakeroot in realtà non “fa nulla, non puoi aver acquisito alcuna abilità che non avevi” prima.

Ma , e questo è lo scopo di fakeroot, la modifica della scheda potrebbe non essere banale.Poiché è con un pacchetto che può essere installato sul tuo sistema, hai un tar ed, gzip ed, xz ed, bzip2 ed o qualsiasi altro formato che tiene insieme i tuoi file e ricorda i loro permessi e proprietari. Puoi modificare facilmente il file compresso e modificare la proprietà di un file? Non so voi, ma non riesco a pensare a un modo.

Potrebbe esserci uno strumento costruito che, una volta che tutto è compresso, modifica il file compresso e modifica programmaticamente le proprietà e i permessi ? Sì, potrebbe. Quindi puoi simulare le proprietà prima di comprimerle o modificarle dopo. Le persone di Debian hanno deciso che il primo è più facile.

4. Perché non usare solo sudo?

Prima di tutto, non hai bisogno dei privilegi di root per creare software e non hai bisogno dei privilegi di root per comprimerli. Quindi, se non ne hai bisogno, dovresti essere davvero un utente di Windows anche solo per pensare di ottenere quellautorizzazione. Ma a parte il sarcasmo, potresti non avere nemmeno la password di root.

Inoltre, diciamo che hai i permessi di root. E diciamo che vuoi fingere che un file debba avere accesso in lettura solo al radice. Quindi sudo, in realtà cambi il proprietario del file e le autorizzazioni in root, esci dalla shell di root e provi a impacchettare tutto. Non riesci perché ora non puoi più leggere il file poiché non hai accesso come root. Quindi devi sudo, comprimere e compilare il pacchetto come root. Effettivamente, devi farlo tutto come root.

Questo è cattivo TM .

Come packager, non hai bisogno dei permessi di root e non dovresti ottenerlo. Quando se installi un pacchetto, potresti aver bisogno di installare qualche file (A) come root ed è lì che hai bisogno dei permessi di root. Tutto ciò che fakeroot fa è renderlo possibile. Consente al packager di elencare A come di proprietà di root per larchiver, in modo che quando il pacchetto viene decompresso dallutente, larchiver richiede lautorizzazione di root e crea A come di proprietà di root.

Commenti

  • Eccellente scrittura, questo lo rende chiaro.
  • So either you could fake the ownerships before compressing, or change them after. Debian people decided the former is easier. Questo mi ha aiutato mentre continuavo a pensare ‘ perché non modificarlo dopo? ‘.
  • Grazie, questo chiarisce la confusione che avevo dopo aver letto la risposta di @Morten ‘

Answer

AFAIK, fakeroot esegue un comando in un ambiente in cui sembra avere privilegi di root per la manipolazione dei file. Ciò è utile per consentire agli utenti di creare archivi (tar, ar, .deb ecc.) Con file al loro interno con permessi / proprietà di root. Senza fakeroot sarebbe necessario disporre dei privilegi di root per creare i file costitutivi degli archivi con i permessi e la proprietà corretti, e quindi impacchettarli, oppure si dovrebbe costruire gli archivi direttamente, senza utilizzare larchiviatore.

fakeroot funziona sostituendo le funzioni della libreria di manipolazione dei file (chmod (), stat () ecc.) con quelle che simulano leffetto che avrebbero avuto le funzioni di libreria reali, se lutente fosse stato veramente root.

Sinossi:

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

Controlla di più qui: fakeroot

Commenti

  • @MaskTheSmokin: Quindi fakeroot ti dà il potere di superutente solo per le operazioni di manipolazione dei file, giusto.
  • Non dà davvero super user, fa solo finta: il programma in esecuzione pensa di avere i privilegi di root, mentre in realtà utilizza ancora i normali privilegi dellutente ‘.
  • Dovè la differenza tra the program running in it thinks it has root privileges e il programma con privilegi di root? Se posso eseguire un rm -rf / e il programma, eseguendolo, penso di avere privilegi di root …
  • @userunknown Potresti riuscire a bypassare rm ‘ s controlla di avere autorizzazioni sufficienti, ma il kernel stesso non ‘ te lo consente ; la chiamata di sistema unlink non andrebbe a buon fine. ‘ non spetta alla sola applicazione gestire i permessi, oppure ‘ saresti in grado di scrivere la tua applicazione che non ‘ t controlla i permessi e fai quello che vuoi con esso
  • Un esempio per chiarire la necessità di fakeroot sarebbe fantastico. Riesco a vedere gli usi di fakeroot, ma ‘ non capisco perché le persone non possono ‘ aggirare i permessi di root al punto che ‘ è più facile falsificarlo.

Risposta

Lho usato per gli script di creazione di pacchetti. Non ero sicuro che la persona che esegue il ha accesso a livello di root, ma lo script doveva ancora generare, ad esempio, un file tar che conteneva file che appartengono a root. Il modo più semplice per farlo era eseguire lo script di creazione del pacchetto sotto fakeroot, che ha indotto larchiviatore a credere che il i file appartengono a root e vengono impacchettati come tali allinterno dellarchivio. In questo modo, quando il pacchetto è stato decompresso sulla macchina di destinazione (su una macchina completamente diversa), i file non appartenevano a utenti strani o inesistenti.

Pensandoci, lunico posto in cui lho visto era per costruire una sorta di archivio: rootf di sistemi embedded, archivi tar.gz, pacchetti rpm, pacchetti .deb, ecc.

Commenti

  • fakeroot è uno strumento per aggirare il software di pacchettizzazione con bug: non cè motivo per cui devi essere root per creare tali pacchetti, b ut dato che non ‘ ti permettono di specificare i permessi dei file in qualsiasi altro modo che impostarli direttamente nel filesystem prima che tu non abbia scelta

Risposta

Un utilizzo comune è scoprire a quali file un binario in errore desidera veramente accedere. Cioè, scoprire e correggere o aggirare i bug causati da percorsi codificati e da una gestione impropria delle eccezioni.

Risposta

Puoi usa fakeroot senza avere effettivamente i privilegi di root. Se avessi su e / o sudo saresti in grado di distruggere il tuo sistema con un semplice rm -rf /, ma con fakeroot al massimo rimuoveresti la tua home directory.

Commenti

  • Questo non ‘ per spiegare la necessità di fakeroot. Puoi rimuovere la tua directory home come te stesso.

Risposta

La semplice risposta:

su e sudo eseguono comandi come root. fakeroot no, al di fuori della sua parziale disposizione sandbox.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *