Questão Como posso usar o docker sem o sudo?


Nas páginas de documentação do Docker, todos os comandos de exemplo são mostrados sem sudo, como este:

docker ps

No Ubuntu, o binário é chamado docker.io. Também não funciona sem sudo:

sudo docker.io ps

Como posso configurar o Docker para que eu não precise prefixar todos os comandos do Docker com o sudo?


637
2018-06-06 08:17


origem


Não esqueça de habilitar o ufw;) - Rinzwind
No Ubuntu 14.04 Há sim também binário 'docker'. - anatoly techtonik
@anatolytechtonik Eu também usei 'docker' em vez de 'docker.io' no Ubuntu 14.04 LTS - Nabin
A instalação recomendada é não  o docker em repos padrão do ubuntu; em vez disso, instruções aqui ( docs.docker.com/engine/installation/linux/ubuntulinux ), recomendamos o uso do docker repo. Remova todo o material existente do docker e verifique se você está obtendo o da fonte certa: apt-cache policy docker-engine (o URL do apt deve ser de dockerproject.org) - michael
Que tal um alias:? Dessa forma, você ainda usa o sudo, com proteção por senha. alias docker = "estivador sudo" - Andrej Panjkov


Respostas:


o manual de encaixe tem isto a dizer sobre isso:

Dando acesso não-root

O daemon do docker sempre é executado como o usuário raiz e, como o Docker versão 0.5.2, o daemon do docker é vinculado a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete do Unix é de propriedade do usuário root e, portanto, por padrão, você pode acessá-lo com o sudo.

A partir da versão 0.5.3, se você (ou o instalador do Docker) criar um grupo Unix chamado docker e adicionar usuários a ele, o daemon do docker tornará a propriedade do soquete do Unix gravável / gravável pelo grupo de encaixe quando o daemon iniciar . O daemon do docker sempre deve ser executado como o usuário raiz, mas se você executar o cliente do docker como um usuário no grupo de estivadores, não será necessário incluir o sudo em todos os comandos do cliente. A partir de 0.9.0, você pode especificar que um grupo diferente de docker deve possuir o soquete Unix com a opção -G.

Aviso: o grupo de estivadores (ou o grupo especificado com -G) é equivalente à raiz; Vejo Detalhes do Docker Daemon Attack Surface e esta postagem no blog Por que não permitimos que usuários não-root executem o Docker no CentOS, Fedora ou RHEL  (obrigado michael-n).


Importante ler: Etapas de pós-instalação para Linux (também links para Detalhes do Docker Daemon Attack Surface).

Gerenciar Docker como um usuário não raiz

O daemon do docker é vinculado a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete Unix é de propriedade do usuário root e outros usuários só podem acessá-lo usando o sudo. O daemon do docker sempre é executado como o usuário root.

Se você não quiser usar o sudo ao usar o comando docker, crie um grupo do Unix chamado docker e adicione usuários a ele. Quando o daemon do docker é iniciado, ele torna a propriedade do soquete do Unix legível / gravável pelo grupo de encaixe.


  • Adicione o grupo de estivadores, se ainda não existir:

    sudo groupadd docker
    
  • Adicione o usuário conectado "$ USER" ao grupo de encaixe. Altere o nome de usuário para corresponder ao seu usuário preferido, se você não quiser usar seu usuário atual:

    sudo gpasswd -a $USER docker
    
  • Faça um newgrp docker ou sair / entrar para ativar as alterações aos grupos.

  • Você pode usar

    docker run hello-world
    

    para verificar se você pode executar o docker sem sudo.


953
2018-06-06 08:24



Não é essa a arquitetura mais insegura para produção? Eu devo estar esquecendo alguma coisa - matt
Sim, mas todo processo privilegiado abre potencial para exploração. O docker está conectando o sistema operacional para realmente exigir esse nível de privilégios? - matt
newgrp docker não funcionou para mim, eu tive que sair. - lolmaus - Andrey Mikhaylov
Vale a pena ressaltar que isso dá ao usuário acesso raiz irrestrito e não protegido por senha. Veja detalhes do vulnerabilidade aqui - Chris Foster
você NÃO precisa reiniciar o daemon do docker para que essa mudança ocorra !! Basta ter o usuário que você acabou de adicionar sair, em seguida, de volta - Tommy


Para executar o comando do docker sem sudo, você precisa adicionar seu usuário (que tem privilégios de root) ao grupo docker. Para esta execução, siga o comando:

 sudo usermod -aG docker $USER

Agora, faça o logout do usuário e faça o login novamente. Esta solução é bem explicada Aqui com o processo de instalação adequado.


153
2018-02-27 19:57



depois de adicionar user to group, execute este comando: sg group_name -c "bash" - madjardi
realmente não precisa reiniciar o sistema operacional. Basta fazer logout e efetuar login novamente. - binW
você não precisa reiniciar o sistema operacional para que essa alteração ocorra! Isso vai bombardear todos os contêineres em execução! Basta ter o usuário que você acabou de adicionar log out em seguida. - Tommy
Como esse comando é diferente de "sudo gpasswd -a $ {USER} docker" em outra resposta? Se em tudo ... - Ashley Aitken
Por favor, adicione o aviso dado pelos documentos: "O grupo docker [...] é equivalente à raiz", então as pessoas têm a chance de pensar sobre isso - Murmel


O mecanismo pelo qual adicionar um usuário ao grupo docker concede permissão para executar o docker é obter acesso ao soquete da janela de encaixe em /var/run/docker.sock. Se o sistema de arquivos que contém /var/run foi montado com as ACLs ativadas, isso também pode ser obtido via ACLs.

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

Eu só estou incluindo isso para completar.

Em geral, recomendo evitar as ACLs sempre que uma boa alternativa baseada em grupos estiver disponível: É melhor se os privilégios de um sistema puderem ser compreendidos observando somente as associações de grupo. A necessidade de verificar o sistema de arquivos em busca de entradas de ACL para entender os privilégios do sistema é um fardo adicional para as auditorias de segurança.

Aviso 1: Isso tem o mesmo root equivalência como adicionar username ao docker grupo. Você ainda pode iniciar um contêiner de uma maneira que root acesso ao sistema de arquivos do host.

Aviso 2: ACLs são significativamente mais difíceis para auditorias de segurança do que segurança baseada em grupo. Provavelmente, evite as ACLs, se possível, quando puder usar grupos, pelo menos em ambientes relevantes para auditoria.


25
2017-12-01 16:08



Funcionou em 16.04 - edib
Isto é o que eu precisava, outras respostas, exigem que o usuário tenha permissão de root. Obrigado fazer muito! - Mrinal Saurabh
Muito melhor maneira imo. A janela de encaixe do grupo é equivalente à raiz e isso é sempre um sinal de perigo. E não vejo nenhuma desvantagem em assumir a propriedade desse único arquivo. - Xerus
Você poderia descrever quais comandos devem ser executados para "obter acesso ao soquete da janela de encaixe em /var/run/docker.sock"? - Yuval Atzmon
@ Xerus se eu entendi corretamente, quem pode escrever para este socket pode obter privilégios equivalentes a root também. Então, dar a alguém acesso a esse soquete via ACL tem o mesmo efeito de segurança que adicionar essa pessoa ao grupo de encaixe. - Paŭlo Ebermann