Por exemplo, docker. Depois de instalar o docker, temos a opção de usar sudo para cada comando do docker ou adicionar o usuário ao grupo "docker" e esse usuário pode executar todos os comandos do docker. (Eu entendo as graves implicações de segurança de adicionar usuários ao grupo docker, mas ignore esse aspecto, pois é irrelevante para minha pergunta).
Assim, uma vez que o usuário é adicionado ao grupo "docker", o usuário pode executar todos os comandos do docker diretamente, como "docker ps", "docker images" etc (sem sudo). Por meio do processo docker, o usuário pode ler e gravar arquivos que aparentemente são de propriedade do root, por exemplo /var/lib/docker & /etc/docker/daemon.json etc.
Como tudo isso foi possível simplesmente adicionando um usuário a um grupo? Onde é possível visualizar/modificar o que a associação ao grupo permite e não permite?
O
docker
comando realmente não faz nada por conta própria. Seu único trabalho é entrar em contato com o serviço do sistema "dockerd" (daemon) e solicitar que ele faça as operações em seu nome. E como o serviço é executado como o usuário 'root', ele pode acessar qualquer arquivo que o root tenha permissão para acessar e, em seguida, retornar os resultados para você.Não existe um local central ou lista que permita tais coisas com base na associação ao grupo; cada serviço impõe isso por conta própria e, muitas vezes, de forma ligeiramente diferente. Por exemplo, o Docker usa o grupo para permitir que você se conecte ao daemon em
/run/docker.sock
(observe como esse soquete só concede permissões para root:docker).Alguns outros serviços permitem que qualquer pessoa se conecte, mas verifique a associação ao grupo ao receber um comando. (Por exemplo,
systemctl
também não faz nada além de encaminhar seus comandos para o systemd – e o systemd permite que usuários sem privilégios emitam alguns comandos, mas recusa outros.)