2013-09-27 8 views
19

A Docker blog post indica: contenitoriSicurezza dei Docker come viene eseguito come utente root

Docker sono, per impostazione predefinita, abbastanza sicuro; soprattutto se si prende cura di gestire i processi all'interno dei contenitori come utenti non privilegiati (cioè non root)."

Quindi, qual è il problema di sicurezza se sto correndo come una radice sotto la finestra mobile "Voglio dire, è abbastanza sicuro se mi prendo cura dei miei processi come utenti non privilegiati, quindi, come posso essere dannoso per ospitare in un contenitore come utente root? Sto solo chiedendo di capirlo, come può può essere isolato se non è sicuro quando si esegue come root? Quali chiamate di sistema possono esporre il sistema host?

risposta

16

Quando si esegue come root, è possibile accedere a una gamma più ampia di servizi del kernel. Ad esempio, è possibile:

  • manipolare interfacce di rete, tabelle di routing, regole netfilter;
  • creare socket grezzi (e in genere socket "esotici", esercitando codice che ha ricevuto meno controllo rispetto ai vecchi TCP e UDP);
  • montare/smontare/rimontare i filesystem;
  • modificare la proprietà del file, le autorizzazioni, gli attributi estesi, sovrascrivere le autorizzazioni regolari (ad esempio utilizzando percorsi di codice leggermente diversi);
  • ecc

(E 'interessante notare che tutti questi esempi sono protetti da capabilities.)

Il punto chiave è che come root, si può esercitare più il codice del kernel; se esiste una vulnerabilità in quel codice, è possibile attivarla come root, ma non come utente normale.

Inoltre, se qualcuno trova un modo per uscire da un contenitore, se si interrompe come root, è possibile fare molto più danni rispetto a un utente normale, ovviamente.

+0

Così si sarebbe quasi sicuro quando la finestra mobile si esegue gestisce un utente non root per eseguire roba arbitraria – Mustafa

+1

mi piacerebbe avere radici accesso nel contenitore, ma assicurarsi che non possa rompere il sistema host. Questo rende più semplice la filosofia del singolo contenitore per app singola. – CMCDragonkai

+1

L'ultima frase riguardante lo scoppio di un contenitore è un po 'fuorviante. Se riesci a uscire da un contenitore, indipendentemente da chi eri all'interno del contenitore, potresti scoprire come il processo LXC stesso è in esecuzione come sul sistema operativo host. Questo è spesso root. Detto questo, è comunque una buona idea eseguire i processi contenitore come utente non privilegiato, poiché ciò rende più difficile uscire dal contenitore (almeno in teoria). – nateware

5

È possibile riavviare la macchina host facendo eco a /proc/sysrq-trigger sulla finestra mobile. I processi eseguiti come root nella finestra mobile possono farlo.

Questo sembra abbastanza buona ragione per non eseguire processi come root in finestra mobile;)

+6

Ottengo 'bash:/proc/sysrq-trigger: file system di sola lettura ' –

+2

Bene ... dopo due anni finalmente corretto qualcosa? – wrzasa

+0

Sì, scusa, non ho visto la data :) –