Domanda:
Eseguire un server CGI come root è troppo pericoloso?
Tomas
2012-10-16 19:38:21 UTC
view on stackexchange narkive permalink

Ho configurato il mio Raspberry Pi con nginx e fcgiwrap come CGI. Volevo controllare le porte GPIO utilizzando uno script Python con la libreria Rpi.GPIO. Il problema è che per poter controllare le porte, devo eseguire Python come root, quindi CGI come root.

Ho letto in questo la domanda Come includere RPi. GPIO in uno script CGI python con lighttpd? che l'esecuzione di un server CGI come root apre un grosso buco di sicurezza. Puoi spiegare perché?

Due risposte:
#1
+4
Der Hochstapler
2012-10-16 19:51:36 UTC
view on stackexchange narkive permalink

L'esecuzione di un server web come root è considerata non sicura perché qualsiasi falla di sicurezza nelle tue applicazioni web potrebbe potenzialmente consentire a un utente malintenzionato di eseguire codice con privilegi di root.

Se il tuo server web è in esecuzione con privilegi limitati, un l'aggressore può ottenere al massimo gli stessi privilegi di cui dispone il server web.

Il server web non è in esecuzione come root ma chiama il server CGI che è in esecuzione come root. È lo stesso scenario?
@Tomas: Il succo è che l'input dell'utente non dovrebbe mai essere valutato in un contesto root. Perché ciò introduce la possibilità che codice dannoso venga eseguito in quel contesto.
Un utente malintenzionato può ottenere ulteriori privilegi anche con un server Web limitato, ma dovrà rompere anche qualcos'altro. Per esempio. utilizzare un bug httpd per ottenere l'accesso a un host e quindi trovare permessi errati, annusare traffico di rete interno attendibile o trojan di impianto per ottenere il root o l'accesso a un altro computer ecc. Le persone che pensano che la sicurezza sia un prodotto o un perimetro in genere hanno altri errori nel proprio rete e ci saranno sempre bug, quindi non puoi nemmeno riporre completa fiducia in privilegi limitati.
#2
+3
Chris Stratton
2012-10-16 20:53:24 UTC
view on stackexchange narkive permalink

È possibile modificare la proprietà dei file del dispositivo GPIO richiesti in un ID utente non root con il quale eseguire il server Web e gli helper associati. Ancora meglio, assegnali a un gruppo di utenti che includa sia il server web che il tuo account di prova e imposta i bit di autorizzazione del gruppo.

Oppure puoi scrivere un demone che viene eseguito come un utente a cui è stato concesso l'accesso quei file e accetta comandi e query che disinfetta con cura su un canale come un socket di dominio unix, named pipe con restrizioni di accesso a livello di file, ecc.

La versione recente del modulo GPIO di python (a partire dalla versione 0.3.0) utilizza registri GPIO mappati in memoria da `/ dev / mem` (invece di / sys / class / gpio). Si potrebbe cambiare la proprietà di `/ dev / mem`, ma questo non sarebbe molto più sicuro se eseguito come root. Il tuo secondo suggerimento è molto migliore, ma richiede molto più lavoro.
Oppure si potrebbe tornare al vecchio metodo di fare GPIO ...


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...