
Minha equipe fez um show-n-tell recentemente e apresentei minhas descobertas sobreDocker. Expliquei como você pode instalar o Docker com:
curl -sSL https://get.docker.com/ | sh
Expliquei então que, com esta instalação, você precisa prefixar todos os comandos do Docker com sudo
(por exemplo sudo docker info
), a menos que execute:
sudo usermod -aG docker myUser
Depois de fazer isso, você pode simplesmente executar, digamos, docker info
.
Outro engenheiro júnior me perguntou como esse usermod
comando funcionava e eu expliquei conforme entendo os usuários/grupos do Linux:
- Todos os binários do Docker são instalados no sistema pertencente a um grupo chamado
docker
- Como
myUser
por padrão não é membro dodocker
, ele não tem permissões rwx para fazer nada com os binários do Docker - Portanto, a solução é usar
sudo
o que lhe dá permissão de root para o comando fornecido ou concedermyUser
associação aodocker
grupo
Quando expliquei desta forma, um engenheiro sênior me disse abruptamente que eu estava errado e que "é um pouco mais complicado que isso."
Então eu pergunto: estou entendendo mal o modelo de segurança do Linux aqui e o engenheiro sênior está correto? Se sim, o que estou perdendo (e o que diabos é "tão complicado")? Ou estou correto; nesse caso, alguém pode me indicar alguma documentação sólida para provar isso?
Responder1
Todos os binários do Docker são instalados no sistema pertencente a um grupo chamado docker
Incorreta. O docker
binário é propriedade de root:root
:
$ stat `which docker`
File: ‘/usr/bin/docker’
Size: 16296881 Blocks: 31832 IO Block: 4096 regular file
Device: fc00h/64512d Inode: 143202 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Como myUser não é por padrão um membro do docker, ele não tem permissões rwx para fazer nada com os binários do Docker
Os binários são legíveis e executáveis por todos.
Portanto, a solução é usar o sudo, que lhe dá permissão de root para o comando fornecido, ou conceder associação myUser ao grupo docker
O serviço Docker usa um soquete para escutar comandos. O soquete normalmente é:
- localizado em
/var/run/docker.sock
- propriedade de
root:docker
- e gravável em grupo, mas não legível ou gravável por outros:
Por exemplo:
$ stat /var/run/docker.sock
File: ‘/var/run/docker.sock’
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 10h/16d Inode: 13619 Links: 1
Access: (0660/srw-rw----) Uid: ( 0/ root) Gid: ( 997/ docker)
Queé por isso que ser membro do docker
grupo permite que você execute docker
comandos.
Observe que você pode especificar qual grupo deve ser usado como parâmetro para o docker
serviço. De man docker
:
-G, --group=""
Group to assign the unix socket specified by -H when running in dae‐
mon mode.
use '' (the empty string) to disable setting of a group. Default is
docker.
Então, nãoterser docker
, mas é docker
por padrão.
Responder2
Se você está falando sobre o quão seguro o Linux é e a vulnerabilidade que ele pode ter, sim. Se estou entendendo o que você está perguntando com clareza suficiente, a resposta para você é sim e minha explicação é que o Linux, independentemente da distribuição que eu saiba, pode pegar vírus como qualquer outro sistema operacional, dependendo do que você instala ou não. Veja o flash player como exemplo, mesmo no Windows, ele apresenta muitas falhas de segurança no sistema operacional, tornando-o mais vulnerável do que antes, quando estava pronto para uso
Se você executasse o Linux sem desktop e todos aqueles outros privilégios sofisticados, seria, se não me engano, mais seguro do que com todos os nossos aplicativos favoritos e coisas assim, não sei se minha resposta ajudou, mas espero que tenha ajudado