Administracao de Usuarios e Grupos: useradd, passwd, /etc/passwd e shadow

Administracao de Usuarios e Grupos: useradd, passwd, /etc/passwd e shadow

O Que Voce Vai Conquistar

  • Criar, modificar e excluir usuarios 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 criacao de usuarios
  • Responder a pergunta frequente do exame sobre usermod -aG (a armadilha do -G sozinho) com raciocinio

Este e o nucleo do objetivo 107.1 do LPIC-1 "Gerenciar contas de usuarios e grupos e arquivos de sistema relacionados". O gerenciamento de contas e a base de permissoes e seguranca.

Como os Comandos de Usuario Diferem?

As operacoes de usuario se resumem a tres comandos: criar (useradd), modificar (usermod) e excluir (userdel). Senhas sao uma trilha separada tratada por passwd, e o envelhecimento e tratado por chage.

Finalidade Comando Opcoes-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 distribuicoes tambem incluem o interativo adduser (um script Perl no Debian/Ubuntu), mas o LPIC-1 pergunta sobre a familia de baixo nivel useradd. Este artigo cobre esses.

Criar, Modificar e Excluir Usuarios

Por padrao, useradd nao cria um diretorio home. Sem -m voce facilmente acaba com "pode fazer login mas nao tem home", entao tenha cuidado.

Passo 1: Criar um usuario 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

Opcoes-chave (man useradd):

Opcao Significado
-m Criar o diretorio home (copia /etc/skel)
-d DIR Definir o caminho do diretorio home
-s SHELL Definir o shell de login
-g GROUP Definir o grupo primario
-G G1,G2 Definir grupos secundarios (suplementares)
-u UID Especificar o UID explicitamente
-c COMMENT Definir o campo de comentario (GECOS)

-g e o "grupo primario" e -G sao "grupos secundarios". Um usuario tem exatamente um grupo primario mas pode ter multiplos grupos secundarios.

Passo 2: Definir a senha com passwd

sudo passwd sato
New password:
Retype new password:
passwd: password updated successfully

Uma conta recem-criada frequentemente nao tem senha e esta bloqueada. Somente apos defini-la com passwd o usuario pode fazer login normalmente.

Passo 3: Modificar um usuario com usermod

sudo usermod -aG wheel,docker sato
id sato
uid=1001(sato) gid=1001(sato) groups=1001(sato),10(wheel),998(docker)

Opcoes-chave (man usermod):

Opcao Significado
-aG G1,G2 Adicionar a grupos secundarios (-a = append, mantem existentes)
-G G1,G2 Substituir grupos secundarios (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 primario

Passo 4: Excluir um usuario com userdel

sudo userdel -r sato
(No output. -r also removes the home directory and mail spool.)

userdel sozinho deixa o diretorio home. Adicionar -r tambem remove o diretorio home e o spool de correio. Excluir um usuario que ainda tem processos em execucao pode falhar.

Como Gerenciar Grupos?

As operacoes de grupo usam groupadd (criar), groupmod (modificar) e groupdel (excluir); o gerenciamento de membros e 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, e auto-atribuido 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)

Voce nao pode excluir um grupo que e o grupo primario de algum usuario. Voce deve primeiro alterar o grupo primario desse usuario.

Qual e a Diferenca Entre /etc/passwd e /etc/shadow?

/etc/passwd armazena as informacoes basicas da conta, enquanto /etc/shadow armazena a senha criptografada e os dados de envelhecimento. Separar a senha do passwd e 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 esta em /etc/shadow
3 UID 1001 ID do usuario
4 GID 1001 ID do grupo primario
5 GECOS Sato Taro Comentario (nome completo etc.)
6 Home /home/sato Diretorio home
7 Shell /bin/bash Shell de login

Uma conta cujo 7o campo e /sbin/nologin ou /bin/false e apenas para servicos e nao 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 Ultima alteracao Dias desde 01-01-1970
4 Dias minimos Nao pode alterar novamente por este numero de dias
5 Dias maximos Deve alterar apos este numero de dias
6 Dias de aviso Dias para avisar antes da expiracao
7 Dias inativos Dias que a conta permanece utilizavel apos expiracao
8 Expiracao da conta Dias desde 01-01-1970
9 Reservado Nao utilizado

/etc/shadow e legivel apenas pelo root (permissoes como 0640). Ocultando-o de usuarios 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 virgulas (usuarios que pertencem como grupo secundario). /etc/gshadow armazena a senha do grupo mais administradores e membros (man 5 gshadow).

A lista de membros em /etc/group mostra apenas usuarios que tem este grupo como grupo secundario. Usuarios cujo grupo primario e este nao sao listados aqui (isso e expresso pelo GID em /etc/passwd).

O Papel de /etc/skel e /etc/login.defs

/etc/skel e o template para um novo diretorio home, e /etc/login.defs define os valores padrao para useradd. Ambos moldam o que acontece no momento da criacao do usuario.

Quando useradd -m cria um home, os arquivos sob /etc/skel (.bashrc, .profile etc.) sao copiados para o novo home. Coloque aqui as configuracoes iniciais que voce deseja para todo usuario.

/etc/login.defs define os intervalos de auto-atribuicao para UID/GID (UID_MIN / UID_MAX etc.), os padrao 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 e o comando dedicado para os campos de envelhecimento em /etc/shadow. Aprenda-o junto com as opcoes 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

Opcoes-chave (man chage):

Opcao Significado
-l Listar as configuracoes de envelhecimento atuais
-M DAYS Tempo de vida maximo da senha
-m DAYS Dias minimos entre alteracoes
-W DAYS Dias de aviso antes da expiracao
-E DATE Data de expiracao da conta (YYYY-MM-DD)
-d DATE Data da ultima alteracao (-d 0 forca alteracao no proximo login)

Bloquear e forcar alteracao 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, forcando uma alteracao de senha no proximo login.

Erros Comuns e Correcoes

Usar usermod -G sem -a remove grupos existentes

usermod -G docker sato substitui os grupos secundarios por apenas docker, entao o usuario e removido de wheel e outros. Para adicionar, use usermod -aG docker sato.

Esquecer -m no useradd deixa sem home

useradd sato sozinho nao cria diretorio home, e as configuracoes de /etc/skel nao sao aplicadas apos o login. Faca de useradd -m sato seu padrao (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 e um estado normal. E 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 diretorio 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.

Mudanca de grupo nao entra em vigor

Adicionar um grupo secundario com usermod -aG nao se aplica a sessoes 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.

Solucao de Problemas

Sintoma: useradd diz "user already exists"

Causa: Um usuario com o mesmo nome ja existe, ou o UID colide

Verificacao:

getent passwd sato
getent passwd 1001

Correcao: Inspecione a conta existente e exclua-a com userdel se desnecessaria. Para colisao de UID, escolha um UID livre com -u.

Sintoma: O usuario esta no grupo correto mas nao tem permissao

Causa: Nao fez login novamente apos o grupo secundario ser adicionado (a sessao nao captou a mudanca)

Verificacao:

id sato
getent group docker

Correcao: Faca logout e login novamente. Para uma acao pontual que voce quer imediatamente, troque de grupo com newgrp docker.

Sintoma: groupdel diz "cannot remove the primary group"

Causa: O grupo que voce esta tentando excluir e o grupo primario de algum usuario

Verificacao:

getent passwd | awk -F: '$4=="1500"{print $1}'

Correcao: Altere o grupo primario desse usuario com usermod -g other user, depois execute groupdel.

Lista de Verificacao

  • [ ] Criou um usuario com home usando useradd -m -s /bin/bash
  • [ ] Definiu a senha com passwd
  • [ ] Adicionou a um grupo secundario 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

Cenario Comando Finalidade
Criar useradd -m -s /bin/bash user Criar usuario com home
Senha passwd user Definir a senha
Adicionar grupo secundario 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 administracao de usuarios e grupos e a base de permissoes e seguranca. Combine em seguida com gerenciamento de arquivos e ambiente de shell para conectar seu conhecimento operacional.

Proximas 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

Pratica