Boas notícias: o novo docker (versão 19.03 (atualmente experimental)) poderá executar sem raiz, negando os problemas que podem ocorrer usando um usuário root. Chega de mexer com permissões elevadas, raiz e qualquer coisa que possa abrir sua máquina quando você não quiser.
Vídeo sobre isso no daemon [DockerCon 2019] Hardening Docker com modo sem raiz
Algumas advertências para o modo Docker sem raiz
Os engenheiros do Docker dizem que o modo sem raiz não pode ser considerado um substituto para o conjunto completo de recursos do mecanismo do Docker. Algumas limitações ao modo sem raiz incluem:
- Os controles de recursos do cgroups, perfis de segurança do apparmor, ponto de verificação / restauração, redes de sobreposição etc. não funcionam no modo sem raiz.
- A exposição de portas de contêineres atualmente requer um processo auxiliar socat manual.
- Somente as distros baseadas no Ubuntu suportam sistemas de arquivos de sobreposição no modo sem raiz.
- Atualmente, o modo sem raiz é fornecido apenas para compilações noturnas que podem não ser tão estáveis quanto você está acostumado.
A partir do docker 19.3, isso é obsoleto (e mais perigoso do que o necessário):
O manual do docker tem a dizer sobre isso:
Dando acesso não raiz
O daemon docker sempre é executado como usuário raiz e, desde o Docker versão 0.5.2, o daemon docker se liga a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete Unix pertence à raiz do usuário e, 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 docker fará com que a propriedade do soquete Unix seja lida / gravável pelo grupo docker quando o daemon iniciar . O daemon docker sempre deve ser executado como usuário raiz, mas se você executar o cliente docker como usuário no grupo docker, não precisará adicionar sudo a todos os comandos do cliente. A partir do 0.9.0, você pode especificar que um grupo que não seja o docker deve possuir o soquete Unix com a opção -G.
Aviso: O grupo de janelas de encaixe (ou o grupo especificado com -G) é equivalente à raiz; consulte os detalhes do Docker Daemon Attack Surface e este post do blog sobre Por que não permitimos que usuários não root executem o Docker no CentOS, Fedora ou RHEL (obrigado michael-n).
Na versão recente do modo experimental sem raiz no GitHub , os engenheiros mencionam que o modo sem raiz permite executar o dockerd como um usuário sem privilégios, usando user_namespaces (7), mount_namespaces (7), network_namespaces (7).
Os usuários precisam executar o dockerd-rootless.sh em vez do dockerd.
$ dockerd-rootless.sh --experimental
Como o modo Rootless é experimental, os usuários precisam sempre executar o dockerd-rootless.sh com –experimental.
Importante para ler: etapas de pós-instalação para Linux (também vincula aos detalhes do Docker Daemon Attack Surface ).
Gerenciar o Docker como um usuário não raiz
O daemon do docker se liga a um soquete Unix em vez de uma porta TCP. Por padrão, o soquete Unix pertence à raiz do usuário e outros usuários podem acessá-lo apenas usando o sudo. O daemon docker sempre é executado como usuário root.
Se você não quiser usar o sudo ao usar o comando docker, crie um grupo Unix chamado docker e adicione usuários a ele. Quando o daemon do docker é iniciado, torna a propriedade do soquete Unix lida / gravável pelo grupo do docker.
Adicione o grupo de janelas de encaixe se ele ainda não existir:
sudo groupadd docker
Adicione o usuário conectado "$ USER" ao grupo de janelas de encaixe. Altere o nome do 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 efetue logout / logon para ativar as alterações nos grupos.
Você pode usar
docker run hello-world
para verificar se você pode executar o docker sem o sudo.