Linux: Gerenciamento de Usuários e Grupos
O Linux foi projetado desde o início como um sistema operacional multiusuário. Seja uma equipe de desenvolvimento compartilhando um servidor ou aplicações diferentes precisando de permissões isoladas, o gerenciamento de usuários e grupos é uma habilidade essencial.
📋 Pré-requisitos: Você deve primeiro concluir
- Aula 8: Permissões de Arquivo
1. O Que Você Vai Aprender
- Diferença entre useradd e adduser
- passwd para gerenciamento de senhas
- groupadd e usermod para gerenciamento de grupos
- Configuração de privilégios sudo
- Como ver informações de usuários logados
2. A História de Membros da Equipe Compartilhando um Servidor
(1) O Problema: Um Novo Colega Precisa de uma Conta
A equipe do Alex ganhou um novo colega, Bob, que precisava de uma conta no servidor de desenvolvimento. No Windows, você teria que abrir "Gerenciamento do Computador" → "Usuários e Grupos" → clicar com o botão direito para criar (além de lidar com ativação e políticas de senha).
(2) Solução de Uma Linha no Linux
sudo useradd -m -s /bin/bash bob
sudo passwd bob
# Digite a senha do bob
sudo usermod -aG desenvolvedores,sudo bob
Três comandos, 30 segundos, pronto.
(3) O Benefício: Base Para Colaboração entre Várias Pessoas
Depois de criar o usuário, Bob pode fazer login com ssh bob@servidor, tem seu próprio diretório home, pode acessar o diretório compartilhado do grupo desenvolvedores e pode usar sudo para instalar software.
3. Pontos-Chave
(1) Arquivos Relacionados a Usuários
/etc/passwd # Informações das contas de usuário
/etc/shadow # Senhas criptografadas (somente leitura pelo root)
/etc/group # Informações dos grupos
Cada linha em /etc/passwd tem 7 campos separados por dois-pontos:
alice:x:1001:1001:Alice Wang:/home/alice:/bin/bash
└───┘ └ └───┘ └───┘ └───────┘ └─────────┘ └─────────┘
│ │ │ │ │ │ └── Shell de login
│ │ │ │ │ └────────────── Diretório home
│ │ │ │ └────────────────────────── Nome completo/descrição
│ │ │ └────────────────────────────────── ID do Grupo (GID)
│ │ └──────────────────────────────────────── ID do Usuário (UID)
│ └──────────────────────────────────────────── Marcador de senha (senha criptografada real está em shadow)
└──────────────────────────────────────────────── Nome de usuário
(2) Criando e Gerenciando Usuários
# Criar um usuário (com diretório home e Shell especificado)
sudo useradd -m -s /bin/bash alice
# Definir a senha
sudo passwd alice
chage -d 0 alice) e configure políticas de complexidade de senha.
# Excluir um usuário
sudo userdel bob # Mantém o diretório home
sudo userdel -r bob # Exclui o usuário e o diretório home
# Modificar informações do usuário
sudo usermod -l novonome alice # Mudar o nome de usuário
ℹ️ Nota: O Ubuntu também tem o comando
adduser, que é um wrapper interativo em torno deuseradd— ele cria automaticamente o diretório home, solicita a senha e copia os templates de/etc/skel. Ouseraddé mais flexível, mas exige parâmetros manuais; oadduseré mais amigável, porém menos customizável. Useuseraddem scripts de produção;adduseré suficiente para operações manuais.
sudo usermod -d /home/novohome alice # Mudar o diretório home
sudo usermod -L alice # Bloquear usuário (desabilitar login)
sudo usermod -U alice # Desbloquear usuário
(3) Criando e Gerenciando Grupos
# Criar um grupo
sudo groupadd desenvolvedores
sudo groupadd devops
# Excluir um grupo
sudo groupdev equipe-antiga
# Adicionar um usuário a um grupo
sudo usermod -aG desenvolvedores alice # -aG = anexar ao Grupo
sudo gpasswd -a bob desenvolvedores # Método alternativo
# Remover um usuário de um grupo
sudo gpasswd -d bob desenvolvedores
# Ver os grupos de um usuário
groups alice
# Saída: alice : alice sudo desenvolvedores
(4) Escalonamento de Privilégios via sudo
O sudo permite que usuários comuns executem comandos como root (ou como um usuário especificado).
# Editar configuração do sudoers (nunca edite /etc/sudoers diretamente)
sudo visudo
/etc/sudoers diretamente com vim ou nano! Se houver um erro de sintaxe, o sudo quebra completamente e você não conseguirá escalar privilégios para corrigir. O visudo faz automaticamente a verificação de sintaxe antes de salvar — é a única forma segura de editar.
Configurações comuns:
# Permitir que todos os membros do grupo sudo usem sudo
%sudo ALL=(ALL:ALL) ALL
# Permitir que um usuário específico execute sudo sem senha
alice ALL=(ALL) NOPASSWD: ALL
# Restringir a comandos específicos apenas
bob ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
(5) ▶ Exemplo: Criar um Usuário e Configurar o Ambiente
# Criar o usuário alice
sudo useradd -m -s /bin/bash alice
# Definir a senha
sudo passwd alice
# Adicionar alice ao grupo sudo (para que ela possa escalar privilégios)
sudo usermod -aG sudo alice
# Verificar
id alice
# uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
# Trocar para alice e testar
sudo -u alice whoami
# alice
Saída:
TEXTuid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo) alice
(6) ▶ Exemplo: Criar um Grupo Compartilhado para a Equipe
# Criar o grupo de desenvolvimento
sudo groupadd desenvolvedores
# Adicionar membros da equipe ao grupo desenvolvedores
sudo usermod -aG desenvolvedores alice
sudo usermod -aG desenvolvedores bob
sudo usermod -aG desenvolvedores charlie
# Ver os membros do grupo
grep desenvolvedores /etc/group
# desenvolvedores:x:1005:alice,bob,charlie
Saída:
TEXTdesenvolvedores:x:1005:alice,bob,charlie
(7) ▶ Exemplo: Configurar sudo Sem Senha
# Editar com visudo (método seguro)
sudo visudo
# Adicione no final do arquivo (após a linha %sudo):
alice ALL=(ALL) NOPASSWD: ALL
# Ou criar um arquivo independente
echo "alice ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/alice
sudo chmod 440 /etc/sudoers.d/alice
# Verificar
sudo -l -U alice
Saída:
TEXTUser alice may run the following commands on server: (ALL) NOPASSWD: ALL
(8) ▶ Exemplo: Ver Usuários Online
# Usuários atualmente logados
who
# alice pts/0 2026-07-07 09:15 (192.168.1.100)
# bob pts/1 2026-07-07 10:23 (192.168.1.101)
# Informações mais detalhadas
w
# 10:30:45 up 2 days, 1 user, load average: 0.08, 0.03, 0.01
# USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
# alice pts/0 192.168.1.100 09:15 0.00s 0.23s 0.02s w
# Ver registros recentes de login
last | head -10
# Contar usuários atualmente logados
who | wc -l
Saída:
TEXTalice pts/0 2026-07-07 09:15 (192.168.1.100) bob pts/1 2026-07-07 10:23 (192.168.1.101) 10:30:45 up 2 days, 1 user, load average: 0.08, 0.03, 0.01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT alice pts/0 192.168.1.100 09:15 0.00s 0.23s 0.02s w alice pts/0 192.168.1.100 Mon Jul 7 09:15 still logged in bob pts/1 192.168.1.101 Mon Jul 7 10:23 still logged in 2
(9) ▶ Exemplo: Bloquear e Desbloquear Usuários
# Bloquear um usuário (contas bloqueadas não conseguem fazer login)
sudo usermod -L bob
# Verificar o status do bloqueio
sudo grep bob /etc/shadow
# bob:!$6$... ← O ! antes do campo de senha indica bloqueio
# Tentar fazer login (deve ser negado)
ssh bob@localhost
# Permission denied
# Desbloquear o usuário
sudo usermod -U bob
Saída:
TEXTbob:!$6$xyz...:19600:0:99999:7::: Permission denied, please try again. bob:$6$abc...:19600:0:99999:7:::
(10) ▶ Exemplo Abrangente: Configuração Completa de Conta de Servidor Para um Novo Desenvolvedor
#!/bin/bash
# add-dev-user.sh - Cria uma conta para um novo desenvolvedor
# Verificar argumentos
if [ $# -ne 1 ]; then
echo "Uso: sudo ./add-dev-user.sh <nome_de_usuario>"
exit 1
fi
USERNAME=$1
echo "Criando usuário $USERNAME..."
# 1. Criar o usuário
sudo useradd -m -s /bin/bash "$USERNAME"
# 2. Definir a senha (interativo)
sudo passwd "$USERNAME"
# 3. Adicionar aos grupos desenvolvedores e sudo
sudo usermod -aG desenvolvedores,sudo "$USERNAME"
# 4. Criar diretório SSH
sudo mkdir -p /home/$USERNAME/.ssh
sudo chmod 700 /home/$USERNAME/.ssh
# 5. Copiar configuração de template
sudo cp /etc/skel/.bashrc /home/$USERNAME/
sudo cp /etc/skel/.profile /home/$USERNAME/
# 6. Definir permissões corretas
sudo chown -R $USERNAME:$USERNAME /home/$USERNAME/
echo "Usuário $USERNAME criado!"
echo "Execute manualmente: sudo passwd $USERNAME para definir a senha"
❓ Perguntas Frequentes
P: Qual é a diferença entre root e um usuário comum? R: \1
P: Por que usar sudo em vez de fazer login como root diretamente? R: Segurança + auditoria: comandos executados com
sudosão registrados (/var/log/auth.log), permitindo rastrear quem executou o quê e quando. O login direto como root não distingue entre operadores.
P: O que o
userdel -rexclui? R: O diretório home do usuário e a fila de e-mails. Sem-r, o diretório home é preservado — útil quando você precisa manter dados (por exemplo, durante transições).
P: Por que usuários comuns não conseguem ler
/etc/shadow? R: Porque ele armazena hashes de senhas criptografadas. Embora hashes não possam ser revertidos diretamente, invasores podem usar rainbow tables para ataques de força bruta. É por isso que o arquivo shadow tem permissões600, legível apenas pelo root.
P: Vários usuários fazendo SSH ao mesmo tempo causam conflitos? R: Não. Cada conexão SSH é uma sessão independente com seu próprio processo de Shell. Porém, escrever no mesmo arquivo simultaneamente pode causar conflitos (use locks de arquivo para resolver isso).
📖 Resumo
useradd -m -s /bin/bashcria um novo usuário;passwddefine a senhagroupaddcria grupos;usermod -aGadiciona usuários a grupossudo visudoedita a configuração do sudo com segurança;%grupodefine permissões em nível de grupo/etc/passwdpara informações de usuário,/etc/shadowpara senhas,/etc/grouppara informações de grupowho/w/lastpara ver usuários logados
📝 Exercícios
- Básico (Dificuldade ⭐): Crie um novo usuário
aluno1, defina uma senha, crie um diretório home e, em seguida, usewhoewpara ver as informações dos usuários logados no momento - Intermediário (Dificuldade ⭐⭐): Adicione
aluno1ao gruposudoe verifique se o sudo funciona; depois crie um grupo compartilhadoequipee adicione dois usuários a ele - Avançado (Dificuldade ⭐⭐⭐): Use
sudo -l -U aluno1para checar os privilégios sudo desse usuário, depois crie um arquivo de configuração em/etc/sudoers.d/para restringiraluno1a executar somentesudo aptesudo systemctl