Come posso usare la finestra mobile senza sudo?

630

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

docker ps

Su Ubuntu, il binario è chiamato 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?

    
posta Flimm 06.06.2014 - 10:17

3 risposte

942

Il manuale della finestra mobile ha questo da dire a riguardo :

  

Accesso non root

     

Il daemon docker viene sempre eseguito 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 quando inizia il demone. 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.

     

Avviso: il gruppo finestra mobile (o il gruppo specificato con -G) è equivalente alla radice; vedi dettagli Superficie attacco demone Docker e questo post di blog su Perché non indossiamo Lasciamo che utenti non root eseguano Docker in CentOS, Fedora o RHEL (grazie michael-n).

Importante da leggere: passaggi post-installazione per Linux (si collega anche a < a href="https://docs.docker.com/engine/security/security/#/docker-daemon-attack-surface"> Dettagli superficie attacco demone Docker ).

  

Gestisci finestra mobile 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 usa il comando docker, creare un gruppo Unix chiamato docker e aggiungervi utenti. 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 per abbinare il tuo utente preferito se non vuoi usare il tuo attuale utente:

    sudo gpasswd -a $USER docker
    
  • O fai un newgrp docker o esci da / in per attivare le modifiche ai gruppi.

  • Puoi usare

    docker run hello-world
    

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

risposta data Rinzwind 06.06.2014 - 10:24
151

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

 sudo usermod -aG docker $USER

Ora, disconnettiti l'utente, quindi accedi di nuovo. Questa soluzione è ben spiegata qui con il processo di installazione corretto.

    
risposta data Rohini Choudhary 27.02.2016 - 20:57
23

Il meccanismo con cui aggiungere un utente al gruppo docker concede il permesso di eseguire la finestra mobile è quello di ottenere l'accesso al socket della finestra mobile a /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

L'ho incluso solo 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 scansione del file system per le voci ACL per comprendere i privilegi di sistema è un ulteriore onere per i controlli di sicurezza.

    
risposta data Christian Hujer 01.12.2017 - 17:08

Leggi altre domande sui tag