Como o usermod permite que você ignore o sudo?

Como o usermod permite que você ignore o sudo?

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 usermodcomando 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 chamadodocker
  • Como myUserpor padrão não é membro do docker, ele não tem permissões rwx para fazer nada com os binários do Docker
  • Portanto, a solução é usar sudoo que lhe dá permissão de root para o comando fornecido ou conceder myUserassociação ao dockergrupo

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 dockerbiná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 deroot: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 dockergrupo permite que você execute dockercomandos.

Observe que você pode especificar qual grupo deve ser usado como parâmetro para o dockerserviç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 é dockerpor 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

informação relacionada