Administração de Usuários e Grupos: useradd, passwd, /etc/passwd e shadow

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.defs afetam a criação de usuários
  • Responder a pergunta frequente do exame sobre usermod -aG (a armadilha do -G sozinho) 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

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/passwd e /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

Continue Sua Jornada LPIC-1

Hub LPIC-1

  • Hub de Aprendizado LPIC-1 -- Mapa completo de artigos LPIC-1, acompanhamento de progresso e cobertura dos objetivos do exame

Artigos LPIC-1 Relacionados

Prática