Grupo primário vs secundário

Todo usuário Linux pertence a exatamente um grupo primário (definido no campo GID de /etc/passwd) e pode pertencer a vários grupos secundários. Quando um usuário cria um arquivo, o grupo dono será o grupo primário dele.

id ana
uid=1001(ana) gid=1001(ana) grupos=1001(ana),27(sudo),999(docker)

Aqui, ana é o grupo primário. sudo e docker são grupos secundários.

O arquivo /etc/group

Todos os grupos ficam registrados em /etc/group. O formato de cada linha é:

grep docker /etc/group
docker:x:999:joao,ana,deploy

Campos: nome:senha:GID:membros. O campo membros lista os usuários que têm esse grupo como secundário.

Consultando grupos de um usuário

groups ana
ana : ana sudo docker
# Ver apenas os nomes dos grupos do usuário atual
groups
joao sudo docker

Criando grupos com groupadd

# Criar um grupo simples
sudo groupadd devops

# Criar com GID específico
sudo groupadd -g 1500 dbadmin

Verifique a criação:

getent group devops
devops:x:1002:

Adicionando usuários a grupos

O método mais seguro é usermod -aG:

# Adicionar ana ao grupo devops (sem remover dos outros)
sudo usermod -aG devops ana
Dica: A flag -a (append) é essencial. Sem ela, usermod -G devops ana removeria ana de todos os outros grupos secundários, deixando apenas devops.

Outra opção é o gpasswd, que permite adicionar e remover membros diretamente:

# Adicionar ao grupo
sudo gpasswd -a ana devops

# Remover do grupo
sudo gpasswd -d ana devops
Adicionando o usuário ana ao grupo devops
Removendo o usuário ana do grupo devops

Removendo grupos

sudo groupdel devops

Você não pode remover um grupo que é o grupo primário de algum usuário. Mude o grupo primário do usuário antes:

# Mudar o grupo primário de ana para users
sudo usermod -g users ana

# Agora é possível remover o grupo antigo
sudo groupdel ana

Quando as mudanças de grupo entram em vigor?

Mudanças em grupos secundários só são aplicadas na próxima sessão de login. Para aplicar imediatamente sem fazer logout:

newgrp devops

Esse comando abre um novo shell com o grupo devops ativo. Use id para confirmar.

Dica: Em scripts de automação, prefira sg devops -c "comando" para executar um único comando com o grupo ativo, sem abrir um shell interativo.