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

1. O Que Você Vai Aprender


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

BASH
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

BASH
/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:

TEXT

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

BASH
# Criar um usuário (com diretório home e Shell especificado)
sudo useradd -m -s /bin/bash alice

# Definir a senha
sudo passwd alice
⚠️ Nota: Usuários recém-criados com senhas padrão ou fracas são altamente vulneráveis a ataques de força bruta. Em produção, sempre force os usuários a trocar a senha no primeiro login (chage -d 0 alice) e configure políticas de complexidade de senha.

BASH
# 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 de useradd — ele cria automaticamente o diretório home, solicita a senha e copia os templates de /etc/skel. O useradd é mais flexível, mas exige parâmetros manuais; o adduser é mais amigável, porém menos customizável. Use useradd em scripts de produção; adduser é suficiente para operações manuais.

BASH
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

BASH
# 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).

BASH
# Editar configuração do sudoers (nunca edite /etc/sudoers diretamente)
sudo visudo
⚠️ Nota: Nunca edite /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:

BASH
# 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

BASH
# 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:

TEXT
uid=1001(alice) gid=1001(alice) groups=1001(alice),27(sudo)
alice

(6) ▶ Exemplo: Criar um Grupo Compartilhado para a Equipe

BASH
# 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:

TEXT
desenvolvedores:x:1005:alice,bob,charlie

(7) ▶ Exemplo: Configurar sudo Sem Senha

BASH
# 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:

TEXT
User alice may run the following commands on server:
    (ALL) NOPASSWD: ALL

(8) ▶ Exemplo: Ver Usuários Online

TEXT
# 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:

TEXT
alice   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

BASH
# 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:

TEXT
bob:!$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

BASH
#!/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 sudo sã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 -r exclui? 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ões 600, 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


📝 Exercícios

  1. Básico (Dificuldade ⭐): Crie um novo usuário aluno1, defina uma senha, crie um diretório home e, em seguida, use who e w para ver as informações dos usuários logados no momento
  2. Intermediário (Dificuldade ⭐⭐): Adicione aluno1 ao grupo sudo e verifique se o sudo funciona; depois crie um grupo compartilhado equipe e adicione dois usuários a ele
  3. Avançado (Dificuldade ⭐⭐⭐): Use sudo -l -U aluno1 para checar os privilégios sudo desse usuário, depois crie um arquivo de configuração em /etc/sudoers.d/ para restringir aluno1 a executar somente sudo apt e sudo systemctl
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%