Quali sono i rischi di eseguire "sudo pip"?


94

Di tanto in tanto mi imbatto in commenti o risposte che affermano enfaticamente che correre pipsotto sudoè "sbagliato" o "cattivo", ma ci sono casi (incluso il modo in cui ho impostato un sacco di strumenti) in cui è molto più semplice, o addirittura necessario eseguilo in questo modo.

Quali sono i rischi associati alla corsa pipsotto sudo?


Si noti che questa non è la stessa domanda di questa , che, nonostante il titolo, non fornisce informazioni sui rischi. Anche questa non è una domanda su come evitare l'uso sudo, ma sul motivo specifico per cui si vorrebbe.

Risposte:


103

Quando corri pipcon sudo, corri setup.pycon sudo. In altre parole, esegui codice Python arbitrario da Internet come root. Se qualcuno inserisce un progetto dannoso su PyPI e lo installi, dai a un utente malintenzionato l'accesso root alla tua macchina. Prima di alcune recenti correzioni a pipe PyPI, un utente malintenzionato poteva anche eseguire un attacco man in the middle per iniettare il proprio codice quando si scarica un progetto affidabile.


2
La minaccia si applica solo durante pipo per qualsiasi esecuzione successiva di ciò che è stato installato?
orome

2
Ma questo sarà vero se io sudoo no quando io pip, giusto? Una volta installato, siamo tutti a rischio, non importa come sia arrivato lì?
orome

2
@raxacoricofallapatorius Questo è entrare nel territorio a cui non mi sento a mio agio rispondere, non perché non ne abbia idea (ho un presentimento e posso spiegarne le ragioni) ma perché è notoriamente difficile prevedere come cambiamenti apparentemente piccoli come questi influenzino nel complesso sicurezza. Inoltre, di solito è estremamente semplice evitare non solo sudoma anche questi problemi di autorizzazione installando i pacchetti da qualche altra parte (ad esempio in un virtualenv). Ciò potrebbe anche essere migliore e più affidabile anche ignorando tutti i problemi di sicurezza.

2
@raxacoricofallapatorius A seconda dei permessi di scrittura esatti e del layout della directory, temo che un malware più sofisticato sovrascriverebbe altro codice più affidabile, come il codice utilizzato dalle utilità di sistema abitualmente eseguite come root.

2
Questa risposta è bizzarra. Naturalmente, quando esegui qualcosa con sudogli dai i privilegi di root; questo è il punto centrale sudoe certamente non specifico pip.

19

Oltre agli ovvi rischi per la sicurezza (che penso siano in realtà bassi quando installi un software che conosci) ha portato altre risposte c'è un altro motivo. Python fornito con il sistema fa parte di questo sistema e quando si desidera gestire il sistema si utilizzano strumenti designati per la manutenzione del sistema come il gestore di pacchetti in caso di installazione / aggiornamento / disinstallazione del software. Quando inizi a modificare il software di sistema con strumenti di terze parti (pip in questo caso), non hai alcuna garanzia sullo stato del tuo sistema. Ancora un altro motivo è che sudo può portarti problemi che non avresti una possibilità o che avresti una piccola possibilità di avere altrimenti. Vedi per esempio Mismatch tra sys.executable e sys.version in Python

Le distribuzioni sono consapevoli di questo problema e cercano di mitigarlo. Ad esempio Fedora - Rendere sudo pip sicuro e Debian - dist-packages invece di site-packages .


6

Usare pip in questo modo significa che ti fidi di esso al livello in cui gli permetti di fare qualsiasi cosa per il tuo sistema. Non solo pip, ma anche qualsiasi codice che scaricherà ed eseguirà da fonti di cui potresti non fidarti e che può essere dannoso.

E pip non ha bisogno di tutti quei privilegi, solo l'accesso in scrittura a file e directory specifici. Se non puoi usare il gestore di pacchetti del tuo sistema e non vuoi passare all'ambiente virtuale, puoi creare un utente specifico con privilegi di scrittura nella directory di installazione di python e usarlo per pip. In questo modo puoi controllare meglio cosa può fare e cosa non fare. E puoi usare sudo -uper quello!


Quindi tutto ciò che devo fare è, ad esempio, concedermi i permessi di scrittura per site-packages?
orome

1
@raxacoricofallapatorius non solo lì, poiché alcuni pacchetti installano anche script di supporto (come pipse stesso, IPython, django, pygments, ...) quindi avrai anche bisogno di accedere a qualsiasi directory in cui si installano.
MattDMo

Sì e no. Non sono un esperto di sicurezza, ma penso che sia meglio se l'utente che esegue gli script non ha il permesso di scrittura. Pertanto suggerisco piuttosto un utente separato.
Cilyan

@ MattDMo: Sì, ha senso; ma questi casi sono probabilmente scoperti facilmente poiché le cose falliscono senza le autorizzazioni appropriate. Se fatto, però, non è questo il modo più sicuro di procedere, allora il peggio che può accadere al mio sistema nel suo complesso è ciò che può accadere comunque quando eseguo qualcosa, giusto? L'unica differenza è che potrei potenzialmente rovinare la mia installazione di Python come me (invece di dover essere su per farlo), giusto?
orome

Come creo un tale utente, al solo scopo di utilizzare pip(non servono altre modifiche al sistema, come una nuova directory home, ecc.)? Dopodiché presumo di cambiare il proprietario di site-packagescon quell'utente, giusto?
orome

1

L'unica cosa "sbagliata" sudoè che, beh, come Super Utente come root, il che significa che puoi potenzialmente distruggere un'installazione con il comando sbagliato. Poiché PIP è un pacchetto di manutenzione per un particolare programma, avresti comunque bisogno di tale accesso per apportare modifiche ...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.