GNU/Linux >> Linux Esercitazione >  >> Linux

In che modo fakeroot non è una violazione della sicurezza in Linux?

Finora, quello che posso raccogliere è che fakeroot viene utilizzato per dare la proprietà a un file che deve essere root quando viene decompresso/targato. La mia domanda è:perché non puoi farlo semplicemente con il chown?

Perché non puoi farlo semplicemente con chown , almeno non come utente non root. (E se stai eseguendo come root, non hai bisogno di fakeroot .) Questo è il punto centrale di fakeroot :per consentire ai programmi che si aspettano di essere eseguiti come root di essere eseguiti come utente normale, fingendo che le operazioni che richiedono root abbiano successo.

Viene utilizzato in genere durante la creazione di un pacchetto, in modo che il processo di installazione del pacchetto da installare possa procedere senza errori (anche se esegue chown root:root o install -o root , eccetera.). fakeroot ricorda la finta titolarità che fingeva di conferire fascicoli, per cui successive operazioni di verifica della titolarità vedono questa al posto di quella reale; questo consente il successivo tar viene eseguito ad esempio per archiviare i file come di proprietà di root.

In che modo fakeroot blocca le escalation di privilegi indesiderate su Linux? Se fakeroot può indurre tar a creare un file di proprietà di root, perché non fare qualcosa di simile con SUID?

fakeroot non inganna tar nel fare qualsiasi cosa, conserva le modifiche che la build vuole apportare senza lasciare che tali modifiche abbiano effetto sul sistema che ospita la build. Non hai bisogno di fakeroot produrre un tarball contenente un file di proprietà di root e suid; se hai un binario evilbinary , eseguendo 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 quei permessi a meno che tu non lo faccia come root:qui non c'è escalation dei privilegi. fakeroot è un privilegio de -strumento di escalation:ti consente di eseguire una build come utente normale, preservando gli effetti che la build avrebbe avuto se fosse stata eseguita come root, consentendo di riprodurli in seguito. L'applicazione degli effetti “per davvero” richiede sempre i privilegi di root; fakeroot non fornisce alcun metodo per acquisirli.

Comprendere l'uso di fakeroot più in dettaglio, considera che una tipica build di distribuzione comporta le seguenti operazioni (tra molte altre):

  • file di installazione, di proprietà di root
  • ...
  • archivia quei file, ancora di proprietà di root, in modo che quando verranno estratti, saranno di proprietà di root

La prima parte ovviamente fallisce se non sei root. Tuttavia, quando si esegue sotto fakeroot , come utente normale, il processo diventa

  • installa i file, di proprietà di root — fallisce, ma fakeroot finge che abbia successo, e ricorda il cambio di proprietà
  • ...
  • archivia quei file, ancora di proprietà di root — quando tar (o qualunque archiviatore utilizzato) chiede al sistema qual è la proprietà del file, fakeroot cambia la risposta in modo che corrisponda alla proprietà registrata in precedenza

In questo modo è possibile eseguire la compilazione di un pacchetto senza essere root, ottenendo gli stessi risultati che si otterrebbero se si stesse realmente eseguendo come root. Usando fakeroot è più sicuro:il sistema non può ancora fare nulla che il tuo utente non possa fare, quindi un processo di installazione non autorizzato non può danneggiare il tuo sistema (oltre a toccare i tuoi file).

In Debian, gli strumenti di compilazione sono stati migliorati in modo da non richiederlo più e puoi compilare pacchetti senza fakeroot . Questo è supportato da dpkg direttamente con il Rules-Requires-Root direttiva (vedi rootless-builds.txt ).

Comprendere lo scopo di fakeroot e gli aspetti di sicurezza dell'esecuzione come root o meno, potrebbe essere utile considerare lo scopo del pacchetto. Quando installi un software dal sorgente, per utilizzarlo a livello di sistema, procedi come segue:

  1. creare il software (che può essere fatto senza privilegi)
  2. installare il software (che deve essere eseguito come root, o almeno come utente autorizzato a scrivere nelle posizioni di sistema appropriate)

Quando impacchettate un pezzo di software, state ritardando la seconda parte; ma per farlo con successo, è comunque necessario "installare" il software, nel pacchetto anziché nel sistema. Quindi, quando impacchettate il software, il processo diventa:

  1. costruisci il software (senza privilegi speciali)
  2. far finta di installare il software (sempre senza privilegi speciali)
  3. acquisire l'installazione del software come pacchetto (idem)
  4. rendere disponibile il pacchetto (idem)

Ora un utente completa il processo installando il pacchetto, che deve essere fatto come root (o ancora, un utente con i privilegi appropriati per scrivere nelle posizioni appropriate). È qui che si realizza il processo con privilegi ritardati ed è l'unica parte del processo che necessita di privilegi speciali.

fakeroot aiuta con i passaggi 2 e 3 precedenti consentendoci di eseguire i processi di installazione del software e di catturarne il comportamento, senza eseguire come root.


NO. La radice falsa ti consente di eseguire la manipolazione delle autorizzazioni e gli strumenti di segnalazione, segnalerà in modo coerente. Tuttavia, in realtà non concederà queste autorizzazioni. Sembrerà che tu li abbia (falsi). Non cambierà nulla al di fuori dell'ambiente.

È utile, se vuoi creare una struttura di directory, che contenga proprietà e permessi, che non possono essere impostati dal tuo utente, che dovrai poi tarare, zippare o altro pacchetto.

Non elevare davvero le autorizzazioni, è falso. Non ti consente di fare nulla (cancellare, scrivere, leggere) che altrimenti non potresti fare. Potresti produrre il pacchetto (in teoria) senza di esso. Potresti ottenere un rapporto falso (ls ) senza di essa.

Non è un difetto di sicurezza, perché non consentire l'accesso o qualsiasi cosa di cui non puoi fare a meno. Funziona senza privilegi. Tutto ciò che serve è intercettare le chiamate a chown , chmod , ecc. Li rende una non operazione, tranne per il fatto che registra ciò che sarebbe accaduto. Intercetta anche le chiamate a stat ecc. in modo che riporti autorizzazioni e proprietà, dal proprio database interno, come se fossero stati eseguiti gli altri comandi. Questo è utile, perché se poi comprimi la directory, avrà i permessi falsi. Se poi decomprimi, come root, allora i permessi diventeranno reali.

Tutti i file che prima non erano leggibili/scrivibili rimarranno non leggibili/scrivibili. Eventuali file speciali (ad es. dispositivi) creati non avranno poteri speciali. Qualsiasi set-uid (a un altro utente), i file non saranno set-uid. Qualsiasi altra escalation di privilegi non funzionerà.

È un tipo di macchina virtuale:una macchina virtuale, in generale, può simulare qualsiasi ambiente/sistema operativo, ma non può fare nulla sull'host che qualsiasi altra applicazione non potrebbe fare. All'interno della macchina virtuale, puoi sembrare che tu faccia qualsiasi cosa. Puoi reinventare il sistema di sicurezza in modo che sia uguale o diverso, tuttavia tutto ciò esisterà sull'host, come risorse di proprietà dell'utente/gruppo del processo che esegue l'ambiente virtuale.


Ci sono già due risposte valide e molto dettagliate qui, ma mi limiterò a sottolineare che il paragrafo introduttivo dell'originale fakeroot la pagina man in realtà lo spiega in modo abbastanza chiaro e conciso:

fakeroot esegue un comando in un ambiente in cui sembra disporre dei privilegi di root per la manipolazione dei file. Questo è utile per consentire agli utenti di creare archivi (tar, ar, .deb ecc.) con file al loro interno con permessi/proprietà root. Senza fakeroot bisognerebbe disporre dei privilegi di root per creare i file costitutivi degli archivi con i permessi e la proprietà corretti, quindi impacchettarli, oppure si dovrebbero costruire gli archivi direttamente, senza utilizzare l'archiviatore.

Fakeroot consente a un utente non root di creare archivi contenenti file di proprietà di root, che è una parte fondamentale della generazione e distribuzione di pacchetti software binari in Linux. Senza fakeroot , gli archivi dei pacchetti dovrebbero essere generati durante l'esecuzione come root effettivo, in modo che contengano la proprietà e le autorizzazioni del file corrette. Sarebbe essere un rischio per la sicurezza. La creazione e il confezionamento di software potenzialmente non attendibile è un'enorme esposizione se eseguita con privilegi di root. Grazie a fakeroot , un utente senza privilegi con file senza privilegi può comunque generare archivi contenenti file con proprietà root.

Ma non è un rischio per la sicurezza, perché nulla nell'archivio è effettivamente di proprietà di root finché i file non vengono ESTRATTI . E anche in questo caso, i file verranno estratti con i loro permessi di root intatti solo se l'operazione viene eseguita da un utente privilegiato. Quel passaggio — dove un fakeroot L'archivio assistito contenente i file "root" viene estratto da un utente privilegiato:è qui che la radice "falsa" diventa finalmente reale. Fino a quel momento, nessun vero privilegio di root viene mai ottenuto o aggirato.

Note

  1. Fakeroot ha generato alcuni concorrenti/imitatori che si travestiranno da fakeroot se installato, incluso fakeroot-ng e pseudo . Ma IMHO né la pagina man di "imitatore" è altrettanto chiara sull'arrivare al punto su questa domanda. Attieniti all'originale, unico e solo fakeroot OG
  2. Altre distribuzioni/sistemi di pacchetti superano questo problema semplicemente non usando la proprietà root nei loro archivi di pacchetti. Su Fedora, ad esempio, il software può essere compilato, installato e impacchettato da un utente non privilegiato senza richiedere fakeroot . È tutto fatto all'interno del $HOME/rpmbuild/ dell'utente space e passaggi normalmente privilegiati come make install essere reindirizzati (tramite meccanismi come --prefix e DESTDIR ) a un $HOME/rpmbuild/BUILDROOT/ gerarchia che potrebbe essere considerata una sorta di spazio "fakechroot" (senza utilizzare effettivamente fakechroot ).

    Ma anche durante make install , tutto viene eseguito come e di proprietà dell'utente non privilegiato. La proprietà e le autorizzazioni del file estratto verranno impostate su root,root e 0644 (o 0755 per gli eseguibili) per impostazione predefinita, a meno che non sia sovrascritto nella definizione del pacchetto (.spec ) nel qual caso vengono archiviati come metadati all'interno del pacchetto finale. Poiché nessuna autorizzazione o proprietà viene effettivamente applicata fino al processo di installazione (privilegiato) del pacchetto rpm, né root né fakeroot è necessario durante l'imballaggio. Ma fakeroot è in realtà solo un percorso diverso per lo stesso risultato.


Linux
  1. Come personalizzare gli ambienti utente Linux

  2. Linux Setuid non funziona?

  3. Come monitorare la sicurezza del server Linux con Osquery

  4. Come creare un utente quasi equivalente al root ma non un utente identico al root in Linux

  5. Linux come copiare ma non sovrascrivere?

Come visualizzare o elencare i lavori Cron in Linux

Come modificare la password di root in Ubuntu Linux

Come installare WordPress su Linux Mint 19

Come crittografare il filesystem di root su Linux

Come modificare la password di root in Linux

Come modificare la password di root in Kali Linux