Administração de Usuários e Grupos: useradd, passwd, /etc/passwd e shadow
O Que Você Vai Conquistar
- Criar, modificar e excluir usuários com
useradd/usermod/userdel - Gerenciar grupos com
groupadd/groupmod/groupdel/gpasswd - Controlar senhas e envelhecimento com
passwd/chage - Ler os campos de
/etc/passwd//etc/shadow//etc/group//etc/gshadow - Explicar como
/etc/skel//etc/login.defsafetam a criação de usuários - Responder a pergunta frequente do exame sobre
usermod -aG(a armadilha do-Gsozinho) com raciocínio
Este é o núcleo do objetivo 107.1 do LPIC-1 "Gerenciar contas de usuários e grupos e arquivos de sistema relacionados". O gerenciamento de contas é a base de permissões e segurança.
Como os Comandos de Usuário Diferem?
As operações de usuário se resumem a três comandos: criar (useradd), modificar (usermod) e excluir (userdel). Senhas são uma trilha separada tratada por passwd, e o envelhecimento é tratado por chage.
| Finalidade | Comando | Opções-chave |
|---|---|---|
| Criar | useradd |
-m -d -s -g -G -u |
| Modificar | usermod |
-aG -L -U -l |
| Excluir | userdel |
-r |
| Senha | passwd |
-l -u -e |
| Envelhecimento | chage |
-l -M -E |
Algumas distribuições também incluem o interativo adduser (um script Perl no Debian/Ubuntu), mas o LPIC-1 pergunta sobre a família de baixo nível useradd. Este artigo cobre esses.
Criar, Modificar e Excluir Usuários
Por padrão, useradd não cria um diretório home. Sem -m você facilmente acaba com "pode fazer login mas não tem home", então tenha cuidado.
Passo 1: Criar um usuário com useradd
sudo useradd -m -s /bin/bash -c "Sato Taro" sato getent passwd sato
sato:x:1001:1001:Sato Taro:/home/sato:/bin/bash
Opções-chave (man useradd):
| Opção | Significado |
|---|---|
-m |
Criar o diretório home (copia /etc/skel) |
-d DIR |
Definir o caminho do diretório home |
-s SHELL |
Definir o shell de login |
-g GROUP |
Definir o grupo primário |
-G G1,G2 |
Definir grupos secundários (suplementares) |
-u UID |
Especificar o UID explicitamente |
-c COMMENT |
Definir o campo de comentário (GECOS) |
-g é o "grupo primário" e -G são "grupos secundários". Um usuário tem exatamente um grupo primário mas pode ter múltiplos grupos secundários.
Passo 2: Definir a senha com passwd
sudo passwd sato
New password: Retype new password: passwd: password updated successfully
Uma conta recém-criada frequentemente não tem senha e está bloqueada. Somente após defini-la com passwd o usuário pode fazer login normalmente.
Passo 3: Modificar um usuário com usermod
sudo usermod -aG wheel,docker sato id sato
uid=1001(sato) gid=1001(sato) groups=1001(sato),10(wheel),998(docker)
Opções-chave (man usermod):
| Opção | Significado |
|---|---|
-aG G1,G2 |
Adicionar a grupos secundários (-a = append, mantém existentes) |
-G G1,G2 |
Substituir grupos secundários (sem -a sobrescreve) |
-L |
Bloquear a senha (prefixar ! em /etc/shadow) |
-U |
Desbloquear a senha |
-l NEWNAME |
Alterar o nome de login |
-g GROUP |
Alterar o grupo primário |
Executar usermod -G group user sem -a remove o usuário de quaisquer grupos secundários existentes não listados. Para "adicionar" a um grupo secundário, sempre use -aG. Este é o acidente mais comum tanto no exame quanto no trabalho.
Passo 4: Excluir um usuário com userdel
sudo userdel -r sato
(No output. -r also removes the home directory and mail spool.)
userdel sozinho deixa o diretório home. Adicionar -r também remove o diretório home e o spool de correio. Excluir um usuário que ainda tem processos em execução pode falhar.
Como Gerenciar Grupos?
As operações de grupo usam groupadd (criar), groupmod (modificar) e groupdel (excluir); o gerenciamento de membros é tratado por gpasswd. /etc/group e /etc/gshadow armazenam os dados.
Passo 1: Criar um grupo com groupadd
sudo groupadd -g 1500 developers getent group developers
developers:x:1500:
-g GID define o GID explicitamente. Se omitido, é auto-atribuído a partir do intervalo em /etc/login.defs.
Passo 2: Modificar um grupo com groupmod
sudo groupmod -n devs developers sudo groupmod -g 1600 devs getent group devs
devs:x:1600:
-n NEWNAME altera o nome do grupo e -g GID altera o GID.
Passo 3: Gerenciar membros com gpasswd
sudo gpasswd -a sato devs sudo gpasswd -d sato devs getent group devs
Adding user sato to group devs Removing user sato from group devs devs:x:1600:
gpasswd -a user group adiciona um membro e -d user group remove um (man gpasswd). gpasswd -A user group designa um administrador de grupo.
Passo 4: Excluir um grupo com groupdel
sudo groupdel devs
(No output)
Você não pode excluir um grupo que é o grupo primário de algum usuário. Você deve primeiro alterar o grupo primário desse usuário.
Qual é a Diferença Entre /etc/passwd e /etc/shadow?
/etc/passwd armazena as informações básicas da conta, enquanto /etc/shadow armazena a senha criptografada e os dados de envelhecimento. Separar a senha do passwd é o mecanismo de shadow password.
Os 7 campos de /etc/passwd
sato:x:1001:1001:Sato Taro:/home/sato:/bin/bash
Separados por dois-pontos, 7 campos (man 5 passwd):
| # | Campo | Exemplo | Significado |
|---|---|---|---|
| 1 | Username | sato |
Nome de login |
| 2 | Senha | x |
x significa que o valor real está em /etc/shadow |
| 3 | UID | 1001 |
ID do usuário |
| 4 | GID | 1001 |
ID do grupo primário |
| 5 | GECOS | Sato Taro |
Comentário (nome completo etc.) |
| 6 | Home | /home/sato |
Diretório home |
| 7 | Shell | /bin/bash |
Shell de login |
Uma conta cujo 7o campo é /sbin/nologin ou /bin/false é apenas para serviços e não pode fazer login interativamente.
Os 9 campos de /etc/shadow
sato:$6$xyz...:19500:0:99999:7:::
Separados por dois-pontos, 9 campos (man 5 shadow):
| # | Campo | Significado |
|---|---|---|
| 1 | Username | Corresponde a /etc/passwd |
| 2 | Senha criptografada | Hash. Um ! ou * inicial significa bloqueada/desabilitada |
| 3 | Última alteração | Dias desde 01-01-1970 |
| 4 | Dias mínimos | Não pode alterar novamente por este número de dias |
| 5 | Dias máximos | Deve alterar após este número de dias |
| 6 | Dias de aviso | Dias para avisar antes da expiração |
| 7 | Dias inativos | Dias que a conta permanece utilizável após expiração |
| 8 | Expiração da conta | Dias desde 01-01-1970 |
| 9 | Reservado | Não utilizado |
/etc/shadow é legível apenas pelo root (permissões como 0640). Ocultando-o de usuários regulares, impede-se a quebra offline dos hashes.
/etc/group e /etc/gshadow
developers:x:1500:sato,suzuki
/etc/group tem 4 campos (man 5 group): nome do grupo, senha (x), GID e uma lista de membros separada por vírgulas (usuários que pertencem como grupo secundário). /etc/gshadow armazena a senha do grupo mais administradores e membros (man 5 gshadow).
A lista de membros em /etc/group mostra apenas usuários que têm este grupo como grupo secundário. Usuários cujo grupo primário é este não são listados aqui (isso é expresso pelo GID em /etc/passwd).
O Papel de /etc/skel e /etc/login.defs
/etc/skel é o template para um novo diretório home, e /etc/login.defs define os valores padrão para useradd. Ambos moldam o que acontece no momento da criação do usuário.
Quando useradd -m cria um home, os arquivos sob /etc/skel (.bashrc, .profile etc.) são copiados para o novo home. Coloque aqui as configurações iniciais que você deseja para todo usuário.
/etc/login.defs define os intervalos de auto-atribuição para UID/GID (UID_MIN / UID_MAX etc.), os padrão de envelhecimento de senha (PASS_MAX_DAYS / PASS_MIN_DAYS / PASS_WARN_AGE) e se criar homes automaticamente (CREATE_HOME) (man 5 login.defs).
grep -E '^(UID_MIN|UID_MAX|PASS_MAX_DAYS)' /etc/login.defs
UID_MIN 1000 UID_MAX 60000 PASS_MAX_DAYS 99999
Como Controlar o Envelhecimento de Senha?
chage é o comando dedicado para os campos de envelhecimento em /etc/shadow. Aprenda-o junto com as opções de bloqueio do passwd.
Verificar e definir envelhecimento com chage
sudo chage -l sato
Last password change : May 30, 2026 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
Opções-chave (man chage):
| Opção | Significado |
|---|---|
-l |
Listar as configurações de envelhecimento atuais |
-M DAYS |
Tempo de vida máximo da senha |
-m DAYS |
Dias mínimos entre alterações |
-W DAYS |
Dias de aviso antes da expiração |
-E DATE |
Data de expiração da conta (YYYY-MM-DD) |
-d DATE |
Data da última alteração (-d 0 força alteração no próximo login) |
Bloquear e forçar alteração com passwd
sudo passwd -l sato sudo passwd -u sato sudo passwd -e sato
passwd: password expiry information changed.
passwd -l bloqueia (prefixar ! em /etc/shadow), -u desbloqueia e -e expira imediatamente, forçando uma alteração de senha no próximo login.
Erros Comuns e Correções
Usar usermod -G sem -a remove grupos existentes
usermod -G docker sato substitui os grupos secundários por apenas docker, então o usuário é removido de wheel e outros. Para adicionar, use usermod -aG docker sato.
Esquecer -m no useradd deixa sem home
useradd sato sozinho não cria diretório home, e as configurações de /etc/skel não são aplicadas após o login. Faça de useradd -m sato seu padrão (ou configure CREATE_HOME yes em /etc/login.defs).
Confundir o ! em uma senha bloqueada com "quebrada"
Um !, !! ou * inicial no hash de /etc/shadow significa bloqueada/desabilitada e é um estado normal. É adicionado por passwd -l ou usermod -L. Remova com passwd -u ou usermod -U.
userdel sozinho deixa o home e enche o disco
userdel sato deixa o diretório home. Para remover completamente, use userdel -r sato. Um home remanescente permanece com a propriedade do UID antigo, e se o mesmo UID for reutilizado depois, a propriedade fica confusa.
Mudança de grupo não entra em vigor
Adicionar um grupo secundário com usermod -aG não se aplica a sessões de login existentes imediatamente. Entra em vigor em um novo login (ou com newgrp group). Use id user para verificar a membresia em /etc/group.
Solução de Problemas
Sintoma: useradd diz "user already exists"
Causa: Um usuário com o mesmo nome já existe, ou o UID colide
Verificação:
getent passwd sato getent passwd 1001
Correção: Inspecione a conta existente e exclua-a com userdel se desnecessária. Para colisão de UID, escolha um UID livre com -u.
Sintoma: O usuário está no grupo correto mas não tem permissão
Causa: Não fez login novamente após o grupo secundário ser adicionado (a sessão não captou a mudança)
Verificação:
id sato getent group docker
Correção: Faça logout e login novamente. Para uma ação pontual que você quer imediatamente, troque de grupo com newgrp docker.
Sintoma: groupdel diz "cannot remove the primary group"
Causa: O grupo que você está tentando excluir é o grupo primário de algum usuário
Verificação:
getent passwd | awk -F: '$4=="1500"{print $1}'Correção: Altere o grupo primário desse usuário com usermod -g other user, depois execute groupdel.
Lista de Verificação
- [ ] Criou um usuário com home usando
useradd -m -s /bin/bash - [ ] Definiu a senha com
passwd - [ ] Adicionou a um grupo secundário com
usermod -aG(com-a) - [ ] Leu os campos de
/etc/passwde/etc/shadow - [ ] Verificou o envelhecimento de senha com
chage -l - [ ] Excluiu com o home usando
userdel -r
Resumo
| Cenário | Comando | Finalidade |
|---|---|---|
| Criar | useradd -m -s /bin/bash user |
Criar usuário com home |
| Senha | passwd user |
Definir a senha |
| Adicionar grupo secundário | usermod -aG group user |
Adicionar mantendo existentes |
| Bloquear | passwd -l / usermod -L |
Desabilitar a conta |
| Envelhecimento | chage -M 90 user |
Definir tempo de vida da senha |
| Excluir | userdel -r user |
Excluir com o home |
| Consultar | getent passwd / id |
Verificar info da conta |
A administração de usuários e grupos é a base de permissões e segurança. Combine em seguida com gerenciamento de arquivos e ambiente de shell para conectar seu conhecimento operacional.
Próximas Leituras
- Gerenciamento Básico de Arquivos
- Variáveis de Ambiente do Shell
- Conceitos Básicos de Linha de Comando