Domanda Come posso usare la finestra mobile senza sudo?


Sulle pagine della documentazione di Docker, tutti i comandi di esempio sono mostrati senza sudo, come questo:

docker ps

Su Ubuntu, viene chiamato il binario docker.io. Inoltre non funziona senza sudo:

sudo docker.io ps

Come posso configurare Docker in modo che non abbia bisogno di prefisso ogni comando Docker con sudo?


636
2018-06-06 08:17


origine


Non dimenticare di abilitare ufw;) - Rinzwind
Su Ubuntu 14.04 c'è anche binario "docker". - anatoly techtonik
@anatolytechtonik Ho anche usato 'docker' invece di 'docker.io' in Ubuntu 14.04 LTS - Nabin
L'installazione consigliata è non  la finestra mobile nei repository ubuntu predefiniti; invece, le istruzioni qui ( docs.docker.com/engine/installation/linux/ubuntulinux ), consiglia di utilizzare il repository docker. Rimuovi tutti gli elementi della finestra mobile esistente e verifica che stai ricevendo quello dalla fonte corretta: apt-cache policy docker-engine (apt url dovrebbe essere da dockerproject.org) - michael
Che ne dici di un alias :? In questo modo, usi ancora sudo, con protezione tramite password. alias docker = "sudo docker" - Andrej Panjkov


risposte:


Il manuale del docker ha questo da dire al riguardo:

Fornire accesso non root

Il daemon docker viene eseguito sempre come utente root e, poiché Docker versione 0.5.2, il daemon docker si collega a un socket Unix anziché a una porta TCP. Per impostazione predefinita, il socket Unix è di proprietà dell'utente root e quindi, per impostazione predefinita, è possibile accedervi con sudo.

A partire dalla versione 0.5.3, se tu (o il tuo programma di installazione Docker) crei un gruppo Unix chiamato docker e aggiungi utenti, il daemon docker renderà la proprietà del socket Unix leggibile / scrivibile dal gruppo docker all'avvio del daemon . Il daemon docker deve sempre essere eseguito come utente root, ma se si esegue il client docker come utente nel gruppo docker, non è necessario aggiungere sudo a tutti i comandi client. A partire da 0.9.0, è possibile specificare che un gruppo diverso dalla finestra mobile debba essere proprietario del socket Unix con l'opzione -G.

Avvertenza: il gruppo docker (o il gruppo specificato con -G) è equivalente alla radice; vedere Dettagli superficie attacco demone Docker e questo blogpost su Perché non permettiamo agli utenti non root di eseguire Docker in CentOS, Fedora o RHEL  (grazie michael-n).


Importante da leggere: passi post-installazione per Linux (si collega anche a Dettagli superficie attacco demone Docker).

Gestisci Docker come utente non root

Il daemon docker si collega a un socket Unix anziché a una porta TCP. Di default il socket Unix è di proprietà dell'utente root e gli altri utenti possono accedervi solo usando sudo. Il daemon docker viene sempre eseguito come utente root.

Se non si desidera utilizzare sudo quando si utilizza il comando finestra mobile, creare un gruppo Unix chiamato finestra mobile e aggiungere utenti ad esso. Quando il daemon docker viene avviato, rende la proprietà del socket Unix leggibile / scrivibile dal gruppo docker.


  • Aggiungi il gruppo finestra mobile se non esiste già:

    sudo groupadd docker
    
  • Aggiungi l'utente connesso "$ USER" al gruppo docker. Cambia il nome utente in modo che corrisponda al tuo utente preferito se non vuoi utilizzare il tuo attuale utente:

    sudo gpasswd -a $USER docker
    
  • O fare a newgrp docker o disconnettersi / entrare per attivare le modifiche ai gruppi.

  • Puoi usare

    docker run hello-world
    

    per verificare se è possibile eseguire la finestra mobile senza sudo.


952
2018-06-06 08:24



Non è l'architettura più insicura per la produzione? Devo mancare qualcosa - matt
Sì, ma ogni processo privilegiato apre il potenziale per l'exploit. L'aggancio docker è così profondo nel sistema operativo che impone realmente quel livello di privilegi? - matt
newgrp docker non ha funzionato per me, ho dovuto uscire. - lolmaus - Andrey Mikhaylov
Vale la pena sottolineare che questo dà quell'utente accesso root non protetto, non protetto da password. Vedi i dettagli del vulnerabilità qui - Chris Foster
NON è necessario riavviare il daemon docker perché questa modifica abbia luogo !! basta che l'utente che hai appena aggiunto esci e poi torni indietro - Tommy


Per eseguire il comando finestra mobile senza sudo, è necessario aggiungere l'utente (che ha i privilegi di root) al gruppo mobile. Per questo comando esegui seguendo:

 sudo usermod -aG docker $USER

Ora, disconnettiti l'utente e accedi di nuovo. Questa soluzione è ben spiegata Qui con una corretta procedura di installazione.


152
2018-02-27 19:57



dopo aver aggiunto l'utente al gruppo, eseguire questo comando: sg group_name -c "bash" - madjardi
non è davvero necessario riavviare il sistema operativo. Basta disconnettersi e accedere di nuovo. - binW
non è necessario riavviare il sistema operativo affinché questa modifica abbia luogo! Quello bombarderà tutti i contenitori funzionanti! Basta che l'utente che hai appena aggiunto esci da lì. - Tommy
In che modo questo comando è diverso da "sudo gpasswd -a $ {USER} finestra mobile" in un'altra risposta? Se affatto ... - Ashley Aitken
Potresti aggiungere l'avviso dato dai documenti: "Il gruppo docker [...] è equivalente alla radice", quindi le persone hanno la possibilità di pensarci - Murmel


Il meccanismo con cui aggiungere un utente al gruppo docker concede il permesso di eseguire la finestra mobile per accedere alla presa della finestra mobile all'indirizzo /var/run/docker.sock. Se il filesystem che contiene /var/run è stato montato con ACL abilitati, questo può essere ottenuto anche tramite ACL.

sudo setfacl -m user:username:rw /var/run/docker.sock

Sto solo includendo questo per completezza.

In generale, consiglio di evitare gli ACL ogni volta che è disponibile una buona alternativa basata sui gruppi: È meglio se i privilegi in un sistema possono essere compresi osservando solo le appartenenze ai gruppi. La necessità di eseguire la scansione del file system per le voci ACL per comprendere i privilegi di sistema è un ulteriore onere per i controlli di sicurezza.


23
2017-12-01 16:08



Ha funzionato il 16.04 - edib
Questo è ciò di cui avevo bisogno, altre risposte, richiedono all'utente il permesso di root. Grazie mille! - Mrinal Saurabh
Molto meglio, imo. La finestra mobile del gruppo è equivalente alla radice e questo è sempre un segno di pericolo. E non vedo alcuno svantaggio nell'assumere la proprietà di questo file. - Xerus
Potresti descrivere quali comandi dovrebbero essere eseguiti al fine di "accedere alla presa della finestra mobile all'indirizzo /var/run/docker.sock"? - Yuval Atzmon
@Xerus se ho capito bene, chiunque possa scrivere su questo socket può ottenere anche privilegi equivalenti a livello di root. Quindi, dare a qualcuno l'accesso a questo socket tramite ACL ha lo stesso effetto di sicurezza dell'aggiunta di quella persona al gruppo docker. - Paŭlo Ebermann