Finora, ciò che posso raccogliere è che fakeroot viene utilizzato per dare la proprietà a un file che deve essere root quando è decompresso / tar. La mia domanda è: perché non puoi semplicemente farlo con Chown?
Perché non puoi semplicemente farlo con chown
, almeno non come utente non root. (E se si esegue come root, non è necessario fakeroot
.) Questo è il punto fakeroot
: consentire a programmi che si aspettano di essere eseguiti come root per essere eseguiti come utenti normali, fingendo che le operazioni che richiedono root abbiano esito positivo.
Questo viene utilizzato in genere durante la creazione di un pacchetto, in modo che il processo di installazione del pacchetto che si sta installando possa procedere senza errori (anche se è in esecuzione chown root:root
o install -o root
, ecc.). fakeroot
ricorda la falsa proprietà che pretendeva di fornire file, quindi le operazioni successive che guardano alla proprietà vedono questo invece di quello reale; questo consente ad tar
esecuzioni successive , ad esempio, di archiviare file di proprietà di root.
In che modo fakeroot ferma le escalation di privilegi indesiderate su Linux? Se fakeroot può ingannare Tar nel creare un file di proprietà di root, perché non fare qualcosa di simile con SUID?
fakeroot
non induce tar
a fare nulla, preserva le modifiche che la build desidera apportare senza lasciare che tali modifiche abbiano effetto sul sistema che ospita la build. Non è necessario fakeroot
produrre un tarball contenente un file di proprietà di root e suid; se hai un binario evilbinary
, in esecuzione tar cf evil.tar --mode=4755 --owner=root --group=root evilbinary
, come utente normale, creerà un tarball contenente evilbinary
, di proprietà di root e suid. Tuttavia, non sarai in grado di estrarre quel tarball e conservare quelle autorizzazioni a meno che tu non lo faccia come root: qui non c'è escalation di privilegi. fakeroot
è un privilegio de-scalation tool: ti permette di eseguire una build come utente normale, preservando gli effetti che la build avrebbe avuto se fosse stata eseguita come root, consentendo di riprodurre tali effetti in un secondo momento. L'applicazione degli effetti "per davvero" richiede sempre i privilegi di root; fakeroot
non fornisce alcun metodo per acquisirli.
Per comprendere l'uso fakeroot
in modo più dettagliato, considera che una tipica build di distribuzione comporta le seguenti operazioni (tra le altre):
- installa file, di proprietà di root
- ...
- archiviare quei file, ancora di proprietà di root, in modo che quando vengono estratti, saranno di proprietà di root
La prima parte ovviamente fallisce se non sei root. Tuttavia, quando si esegue sotto fakeroot
, come un normale utente, il processo diventa
- installa i file, di proprietà di root: questo non riesce, ma
fakeroot
finge di avere successo e ricorda la proprietà cambiata
- ...
- archiviare quei file, ancora di proprietà di root - quando
tar
(o qualunque altro archivio sia in uso) chiede al sistema quale sia la proprietà del file, fakeroot
cambia la risposta in modo che corrisponda alla proprietà registrata in precedenza
In questo modo puoi eseguire un build di pacchetti senza essere root, ottenendo allo stesso tempo gli stessi risultati che otterrai se stavi davvero eseguendo come root. L'uso fakeroot
è più sicuro: il sistema non può ancora fare nulla che l'utente non possa fare, quindi un processo di installazione non autorizzato non può danneggiare il sistema (oltre a toccare i file).
In Debian, gli strumenti di compilazione sono stati migliorati in modo da non richiederlo più, e puoi creare pacchetti senzafakeroot
. Questo è supportato dpkg
direttamente dalla Rules-Requires-Root
direttiva (vedi rootless-builds.txt
).
Comprendere lo scopo fakeroot
e gli aspetti di sicurezza della corsa come root o no, potrebbe aiutare a considerare lo scopo del packaging. Quando si installa un software dal sorgente, per l'utilizzo a livello di sistema, si procede come segue:
- costruire il software (che può essere fatto senza privilegi)
- installare il software (che deve essere fatto come root, o almeno come un utente ha permesso di scrivere nelle posizioni di sistema appropriate)
Quando impacchetti un software, stai ritardando la seconda parte; ma per farlo con successo, è ancora necessario "installare" il software, nel pacchetto piuttosto che nel sistema. Quindi, quando impacchettate il software, il processo diventa:
- costruire il software (senza privilegi speciali)
- fingere di installare il software (di nuovo senza privilegi speciali)
- acquisire l'installazione del software come pacchetto (idem)
- rendere disponibile il pacchetto (idem)
Ora un utente completa il processo installando il pacchetto, che deve essere eseguito come root (o ancora, un utente con i privilegi appropriati per scrivere nelle posizioni appropriate). È qui che viene realizzato il processo privilegiato ritardato ed è l'unica parte del processo che richiede privilegi speciali.
fakeroot
aiuta con i passaggi 2 e 3 sopra consentendoci di eseguire i processi di installazione del software e di acquisirne il comportamento, senza eseguire come root.