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.defsafetam a criacao de usuarios - Responder a pergunta frequente do exame sobre
usermod -aG(a armadilha do-Gsozinho) 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 |
Executar usermod -G group user sem -a remove o usuario de quaisquer grupos secundarios existentes nao listados. Para "adicionar" a um grupo secundario, sempre use -aG. Este e o acidente mais comum tanto no exame quanto no trabalho.
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/passwde/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
- Gerenciamento Basico de Arquivos
- Variaveis de Ambiente do Shell
- Conceitos Basicos de Linha de Comando