Gestão de Utilizadores e Sudo em Linux: Criar, Gerir e Proteger Acessos para Sysadmins em 2026
Linux · Segurança · Users · Sudo · Hardening · PME | ✎ Duarte Spínola | 10 de Julho de 2026
A utilização constante da conta root é uma das práticas mais perigosas em administração de sistemas Linux — cada erro de comando pode destruir o sistema, e cada sessão root é um vector de ataque se comprometida. Este guia cobre a criação e gestão completa de utilizadores em Linux, configuração de sudo com privilégios mínimos, policies de password, expiração de contas, auditoria de acessos, e hardening baseado em NIST SP 800-53. Inclui comandos testados em Ubuntu 24.04, Debian 12, RHEL 9 e CentOS Stream 9, com referências às man pages oficiais e wiki Arch Linux.
Conteúdos
- 1. O que Está a Acontecer — Porque Nunca Usar Root Directamente
- 2. Cenários em que a Gestão de Utilizadores é Crítica
- 3. Anatomia — Ficheiros passwd, shadow, group e sudoers
- 4. Criar Utilizadores — useradd, adduser e Alternativas
- 5. Gerir Utilizadores — Modificar, Bloquear, Remover
- 6. Configurar Sudo — Privilégios Mínimos para PME
- 7. Grupos — Criação, Gestão e Organização por Função
- 8. Policies de Password e Expiração de Contas
- 9. Hardening de Acesso — NIST SP 800-53 para Gestão de Contas
- 10. Diagnóstico e Auditoria — Quem Está Ligado e O Que Fez
- 11. FAQ para Sysadmins
- 12. Erros Comuns e Resoluções Rápidas
1. O que Está a Acontecer — Porque Nunca Usar Root Directamente
A conta root em Linux tem UID 0 e privilégios absolutos — pode alterar qualquer ficheiro, matar qualquer processo, montar discos, e contornar todas as protecções de permissões. Usar root directamente apresenta três riscos principais:
1. Erros irreversíveis — Um simples typo como rm -rf / * (com espaço acidental) ou dd if=... of=/dev/sda executado como root destrói o sistema sem confirmação. Com sudo, comandos perigosos exigem re-autenticação e ficam registados.
2. Vetor de ataque — Se um atacante compromete uma sessão root via SSH, malware, ou exploração de vulnerabilidade, tem acesso total imediato. O MITRE ATT&CK cataloga a exploração de contas privilegiadas como T1078 (Valid Accounts) (MITRE ATT&CK T1078). Com sudo, o atacante precisa de comprometer primeiro um utilizador normal e depois escalar privilégios — duas barreiras em vez de uma.
3. Falta de auditoria — Múltiplos administradores a usar root tornam impossível saber quem executou quê. O sudo regista cada comando: utilizador, terminal, comando executado, e timestamp (man sudoers).
⚠ Em produção, PermitRootLogin deve ser sempre “no” no sshd_config. Se precisa de acesso root, use sudo a partir de uma conta de utilizador confiável. Em PMEs com um único administrador, crie uma conta admin com sudo ALL e desactive o login root directo.
2. Cenários em que a Gestão de Utilizadores é Crítica
| Cenário | Risco | Configuração crítica |
|---|---|---|
| Servidor cloud único admin | Root exposto à Internet | Conta admin + sudo ALL, root login desactivado |
| Equipa IT com 3-5 admins | Necessário audit trail por pessoa | Conta individual por admin + sudo com logging |
| Servidor com aplicações (web, DB) | App não deve correr como root | Utilizador dedicado por serviço (www-data, postgres) |
| Acesso de contractors/externos | Acesso temporário, revogável | Conta com expiração, sudo restrito a comandos específicos |
| Servidor Ansible/automatização | Chave SSH partilhada com root | Utilizador ansible + sudo NOPASSWD apenas para playbooks |
| Compliance (NIS2, ISO 27001) | Necessário least privilege + auditoria | Sudo por função, logs centralizados, revisão periódica |
| Servidor de backup/storage | Dados sensíveis acessíveis | Grupos dedicados, ACLs, sudo apenas para restore |
| Multi-tenant (hosting compartilhado) | Isolamento entre clientes | Utilizador por tenant, quotas, sem sudo |
3. Anatomia — Ficheiros passwd, shadow, group e sudoers
A gestão de utilizadores em Linux assenta em quatro ficheiros principais. Compreender a sua estrutura é essencial para diagnosticar problemas (man passwd, man shadow).
/etc/passwd — Informação pública de utilizadores
# Formato: username:password:UID:GID:GECOS:home:shell root:x:0:0:root:/root:/bin/bash admin:x:1000:1000:Admin User:/home/admin:/bin/bash www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin postgres:x:114:120:PostgreSQL:/var/lib/postgresql:/bin/bash deploy:x:1001:1001:Deploy User:/home/deploy:/bin/bash # O "x" na password significa que a hash está em /etc/shadow # UID 0 = root, UID 1-999 = system users, UID 1000+ = regular users # Shell /usr/sbin/nologin ou /bin/false = sem acesso a shell
/etc/shadow — Hashes de password (apenas root)
# Formato: username:hash:lastchange:min:max:warn:inactive:expire:reserved admin:$y$j9T$AbCdEf...:20120:0:90:7::: deploy:$y$j9T$GhIjKl...:20120:1:365:7:30:: # Campos: # lastchange: dias desde 1970-01-01 da última mudança # min: dias mínimos antes de poder mudar password (0 = qualquer altura) # max: dias até expirar (90 = password expira em 90 dias) # warn: dias de aviso antes de expirar (7 = avisa 7 dias antes) # inactive: dias após expirar antes de bloquear (30 = bloqueia após 30 dias) # expire: data de expiração da conta (vazio = não expira)
/etc/group — Grupos
# Formato: groupname:password:GID:members root:x:0: sudo:x:27:admin,deploy admin:x:1000: www-data:x:33:admin docker:x:998:admin,deploy developers:x:1001:admin,deploy,contractor
/etc/sudoers — Configuração de sudo
# Formato: user host=(runas) command root ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL admin ALL=(ALL:ALL) ALL deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx # NUNCA editar directamente — usar visudo # Documentação: https://man7.org/linux/man-pages/man5/sudoers.5.html
4. Criar Utilizadores — useradd, adduser e Alternativas
useradd (standard POSIX)
O useradd é o comando standard disponível em todas as distribuições Linux (man useradd). É low-level e requer flags para criar uma conta completa:
# Criar utilizador com home directory, shell bash, e grupo próprio sudo useradd -m -s /bin/bash -c "Admin User" admin # -m: cria home directory (/home/admin) # -s: shell (/bin/bash, /bin/zsh, /usr/sbin/nologin) # -c: comentário GECOS (nome completo) # -G: grupos suplementares (separados por vírgula) # Criar utilizador com grupos suplementares sudo useradd -m -s /bin/bash -c "Deploy User" -G sudo,docker deploy # Criar utilizador de sistema (sem home, sem login) sudo useradd -r -s /usr/sbin/nologin -c "Backup Service" backup-svc # -r: utilizador de sistema (UID < 1000) # Definir password após criar sudo passwd admin # New password: ******** # Retype new password: ********
adduser (Ubuntu/Debian — interactivo)
O adduser é um wrapper mais amigável disponível em Ubuntu/Debian. Faz perguntas interactivamente e cria tudo automaticamente:
# Criar utilizador interactivo sudo adduser admin # Adding user 'admin' ... # Adding new group 'admin' (1000) ... # Adding new user 'admin' (1000) with group 'admin' ... # Creating home directory '/home/admin' ... # Copying files from '/etc/skel' ... # New password: ******** # Retype new password: ******** # Full Name []: Admin User # Room Number []: # Work Phone []: # Home Phone []: # Other []: # Is the information correct? [Y/n] y # Criar utilizador de sistema sudo adduser --system --no-create-home --group backup-svc # Adicionar a grupo sudo sudo adduser admin sudo
Criar utilizador com chave SSH pré-configurada
# Criar utilizador + configurar chave SSH + adicionar a sudo sudo useradd -m -s /bin/bash -c "Contractor" -G sudo contractor # Criar directório .ssh sudo mkdir -p /home/contractor/.ssh sudo cp /tmp/contractor_pubkey.pub /home/contractor/.ssh/authorized_keys sudo chmod 700 /home/contractor/.ssh sudo chmod 600 /home/contractor/.ssh/authorized_keys sudo chown -R contractor:contractor /home/contractor/.ssh # Definir expiração da conta (30 dias) sudo chage -E $(date -d "+30 days" +%Y-%m-%d) contractor
5. Gerir Utilizadores — Modificar, Bloquear, Remover
Modificar utilizadores (usermod)
# Adicionar a grupos suplementares sudo usermod -aG docker,www-data admin # -aG = append to groups (NUNCA usar -G sem -a, substitui todos os grupos) # Mudar shell sudo usermod -s /bin/zsh admin # Mudar home directory sudo usermod -d /home/newadmin -m admin # -m = move conteúdo do home antigo # Mudar nome de utilizador sudo usermod -l newname oldname # Mudar UID sudo usermod -u 1500 admin # Bloquear conta (adicionar ! à password) sudo usermod -L admin # Desbloquear sudo usermod -U admin # Expirar conta numa data específica sudo usermod -e 2026-12-31 contractor # Documentação: https://man7.org/linux/man-pages/man8/usermod.8.html
Bloquear e desbloquear contas
# Bloquear password (não pode fazer login por password) sudo passwd -l admin # Unlock sudo passwd -u admin # Expirar password imediatamente (forçar mudança no próximo login) sudo passwd -e admin # O utilizador verá: "You are required to change your password immediately" # Bloquear completamente (password + chave SSH) sudo usermod -L admin sudo usermod -s /usr/sbin/nologin admin
Remover utilizadores (userdel)
# Remover utilizador mas manter home directory sudo userdel admin # Remover utilizador E home directory sudo userdel -r admin # -r = remove home e mail spool # Verificar que foi removido grep admin /etc/passwd # Deve retornar vazio # Documentação: https://man7.org/linux/man-pages/man8/userdel.8.html
⚠ Antes de remover um utilizador, verifique se tem processos a correr. Use ps -u admin e lsof -u admin. Se tiver processos activos, termine-os primeiro com sudo pkill -u admin ou sudo kill <PID>.
6. Configurar Sudo — Privilégios Mínimos para PME
Configuração base de sudo
O sudo permite executar comandos como root (ou outro utilizador) com auditoria completa. A configuração é feita no ficheiro /etc/sudoers ou em ficheiros individuais em /etc/sudoers.d/ (man sudoers, man visudo).
# NUNCA editar /etc/sudoers directamente — usar visudo
sudo visudo
# Configuração base recomendada para PME:
# Defaults de segurança
Defaults env_reset
Defaults mail_badpass
Defaults insults
Defaults log_input,log_output
Defaults use_pty
Defaults timestamp_timeout=15
# Root e grupo sudo têm acesso total
root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL
# Admin tem acesso total com password
admin ALL=(ALL:ALL) ALL
# Deploy: apenas reiniciar serviços, sem password (CI/CD)
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, \
/usr/bin/systemctl restart postgresql, \
/usr/bin/systemctl reload nginx
Ficheiros individuais em /etc/sudoers.d/
Para PMEs com múltiplas contas, é melhor usar ficheiros individuais por utilizador ou função:
# /etc/sudoers.d/admin — acesso total
admin ALL=(ALL:ALL) ALL
# /etc/sudoers.d/deploy — apenas serviços específicos
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, \
/usr/bin/systemctl restart postgresql
# /etc/sudoers.d/contractor — apenas leitura de logs
contractor ALL=(root) NOPASSWD: /usr/bin/journalctl, \
/usr/bin/tail /var/log/nginx/*.log, \
/usr/bin/cat /var/log/nginx/*.log
# /etc/sudoers.d/ansible — apenas Ansible
ansible ALL=(ALL) NOPASSWD: ALL
# Restringir depois com command= no authorized_keys
# Validar sintaxe depois de cada alteração
sudo visudo -c
# Se houver erro de sintaxe, o sudo pode ficar inacessível
Configurar timeout de sudo
# Por defeito, sudo pede password a cada 15 minutos # Reduzir para 5 minutos (mais seguro) sudo visudo # Adicionar: Defaults timestamp_timeout=5 # Ou por utilizador: Defaults:admin timestamp_timeout=10 Defaults:contractor timestamp_timeout=2
Auditar comandos sudo
# Ver histórico de comandos sudo sudo journalctl -t sudo # ou sudo grep sudo /var/log/auth.log # Output típico: # Jul 10 14:23:01 servidor sudo: admin : TTY=pts/0 ; PWD=/home/admin ; COMMAND=/usr/bin/apt update # Jul 10 14:25:30 servidor sudo: deploy : TTY=pts/1 ; PWD=/opt/app ; COMMAND=/usr/bin/systemctl restart nginx # Activar log de input/output (comando completo + output) # Em /etc/sudoers: Defaults log_input,log_output # Os logs ficam em /var/log/sudo-io/
7. Grupos — Criação, Gestão e Organização por Função
Criar e gerir grupos
# Criar grupo sudo groupadd developers sudo groupadd -g 2000 backup-ops # -g = GID específico # Adicionar utilizadores a grupos sudo usermod -aG developers admin sudo usermod -aG developers,backup-ops deploy # Remover de grupo (não há comando directo — usar gpasswd) sudo gpasswd -d admin developers # Listar membros de um grupo getent group developers # developers:x:1001:admin,deploy # Listar grupos de um utilizador groups admin # admin : admin sudo docker developers # Ver todos os grupos cat /etc/group
Organização por função para PME
| Grupo | Função | Sudo |
|---|---|---|
| sudo | Administradores full | ALL=(ALL:ALL) ALL |
| developers | Developers com acesso a repositórios | Apenas reiniciar app services |
| backup-ops | Operadores de backup | Apenas comandos de backup/restore |
| docker | Acesso ao daemon Docker | Sem sudo (grupo docker é suficiente) |
| www-data | Servidor web (Apache/Nginx) | Sem sudo (service account) |
| contractors | Acesso temporário externo | Apenas leitura de logs, contas com expiração |
8. Policies de Password e Expiração de Contas
Configurar expiração com chage
# Ver política actual de um utilizador sudo chage -l admin # Last password change: Jul 10, 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 # Definir password expira em 90 dias, avisa 7 antes sudo chage -M 90 -W 7 admin # Definir password mínima de 1 dia (não pode mudar 2x no mesmo dia) sudo chage -m 1 admin # Expirar conta numa data específica sudo chage -E 2026-12-31 contractor # Bloquear conta após 30 dias de inactividade pós-expiração sudo chage -I 30 admin # Forçar mudança de password no próximo login sudo chage -d 0 admin
Política global de passwords (login.defs)
# /etc/login.defs — políticas globais PASS_MAX_DAYS 90 PASS_MIN_DAYS 1 PASS_WARN_AGE 7 LOGIN_RETRIES 3 LOGIN_TIMEOUT 30 UMASK 027 # Estas definições aplicam-se a novos utilizadores # Para alterar existentes, usar chage individualmente
Qualidade de password com PAM (pwquality)
# Instalar (Ubuntu/Debian) sudo apt install libpam-pwquality # Configurar: /etc/security/pwquality.conf minlen = 12 # mínimo 12 caracteres minclass = 3 # pelo menos 3 classes (upper, lower, digit, special) maxrepeat = 3 # máximo 3 caracteres repetidos consecutivos dcredit = -1 # pelo menos 1 dígito (-1 = obrigatório) ucredit = -1 # pelo menos 1 maiúscula lcredit = -1 # pelo menos 1 minúscula ocredit = -1 # pelo menos 1 especial difok = 5 # 5 caracteres diferentes da password anterior enforce_for_root # aplicar também a root
9. Hardening de Acesso — NIST SP 800-53 para Gestão de Contas
O NIST SP 800-53 inclui controlos específicos para gestão de contas e acesso privilegiado (NIST SP 800-53 Rev 5):
| Controlo NIST | Descrição | Configuração Linux |
|---|---|---|
| AC-2 | Gestão de contas | Inventário de contas, revisão periódica, contas inactivas desactivadas |
| AC-2(2) | Contas privilegiadas | sudo com privilégios mínimos, auditoria de comandos |
| AC-2(3) | Desactivar contas inactivas | chage -I, script de revisão de últimos logins |
| AC-5 | Segregation of duties | Grupos por função (developers, backup-ops, contractors) |
| AC-6 | Least privilege | Sudo restrito a comandos específicos por utilizador |
| AC-6(5) | Privilégios sem acesso total | NOPASSWD apenas para CI/CD, command= no authorized_keys |
| IA-5(1) | Política de passwords | pwquality.conf, PASS_MAX_DAYS=90, chage |
| AU-2 | Auditoria de eventos | sudo logs, log_input/log_output, /var/log/auth.log |
| AU-6 | Revisão de auditoria | Script de revisão semanal de logins sudo |
Script de hardening automático
#!/bin/bash
# hardening-users.sh — Hardening de gestão de utilizadores para PME
# Testado em Ubuntu 24.04, Debian 12, RHEL 9 (2026-07)
set -euo pipefail
# 1. Desactivar login root por SSH (se sshd_config editável)
if [ -f /etc/ssh/sshd_config ]; then
sed -i 's/^#*PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sshd -t && systemctl restart sshd || true
fi
# 2. Configurar políticas globais de password
sed -i 's/^PASS_MAX_DAYS.*/PASS_MAX_DAYS 90/' /etc/login.defs
sed -i 's/^PASS_MIN_DAYS.*/PASS_MIN_DAYS 1/' /etc/login.defs
sed -i 's/^PASS_WARN_AGE.*/PASS_WARN_AGE 7/' /etc/login.defs
# 3. Aplicar a utilizadores existentes (excepto system users)
for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd); do
chage -M 90 -m 1 -W 7 "$user"
echo " Policy applied: $user"
done
# 4. Verificar contas sem password
nopass=$(awk -F: '($2 == "" || $2 == "!") {print $1}' /etc/shadow | grep -v '^$')
if [ -n "$nopass" ]; then
echo "WARNING: Accounts without password: $nopass"
fi
# 5. Verificar contas inactivas (>90 dias sem login)
echo "Checking inactive accounts..."
for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd); do
last_login=$(lastlog -u "$user" | awk 'NR==2 {print $2, $3, $4}')
if [ "$last_login" == "Never logged" ] || [ "$last_login" == "**Never" ]; then
echo " INACTIVE: $user (never logged in)"
fi
done
echo "Hardening complete. Review the output above."
10. Diagnóstico e Auditoria — Quem Está Ligado e O Que Fez
Verificar quem está ligado
# Utilizadores ligados agora w # 14:23:01 up 5 days, 2 users, load average: 0.05, 0.03, 0.01 # USER TTY LOGIN@ IDLE JCPU PCPU WHAT # admin pts/0 09:15 1:23 0.50s 0.10s -bash # deploy pts/1 14:20 0.00s 0.05s 0.01s sshd: deploy@pts/1 # Quem está ligado (simples) who # Histórico de logins last -n 20 # admin pts/0 192.168.1.50 Thu Jul 10 09:15 still logged in # deploy pts/1 10.0.0.5 Thu Jul 10 14:20 still logged in # Logins falhados sudo lastb -n 20 # Último login de cada utilizador lastlog | grep -v "Never logged"
Auditar comandos sudo
# Todos os comandos sudo nas últimas 24h sudo journalctl -t sudo --since "24 hours ago" # Sudo de um utilizador específico sudo journalctl -t sudo | grep "admin" # Sudo num período específico sudo journalctl -t sudo --since "2026-07-10 09:00" --until "2026-07-10 17:00" # Em Ubuntu/Debian sudo grep "sudo" /var/log/auth.log | grep "COMMAND"
Verificar contas sem password ou com shell perigoso
# Contas com shell /bin/bash (podem fazer login)
grep '/bin/bash' /etc/passwd
# Contas sem password definida
sudo awk -F: '($2 == "" || $2 == "*" || $2 == "!") {print $1}' /etc/shadow
# Contas com UID 0 (devia ser apenas root)
awk -F: '$3 == 0 {print $1}' /etc/passwd
# Se aparecer algo além de "root", é um problema de segurança grave
# Verificar contas expiradas ou bloqueadas
sudo chage -l admin | grep -E "expires|inactive"
Script de auditoria semanal
#!/bin/bash
# audit-users.sh — Relatório semanal de auditoria de utilizadores
echo "=== AUDITORIA DE UTILIZADORES ==="
echo "Data: $(date)"
echo
echo "--- Contas com UID 0 (deve ser apenas root) ---"
awk -F: '$3 == 0 {print " " $1}' /etc/passwd
echo
echo "--- Contas com login shell ---"
grep -E '/bin/(bash|zsh|sh|fish)' /etc/passwd | awk -F: '{print " " $1 " (" $6 ")"}'
echo
echo "--- Contas sem password ---"
sudo awk -F: '($2 == "" || $2 == "!") {print " " $1}' /etc/shadow
echo
echo "--- Últimos 10 logins ---"
last -n 10 | head -11
echo
echo "--- Logins falhados (últimos 10) ---"
sudo lastb -n 10 2>/dev/null | head -11
echo
echo "--- Comandos sudo (últimas 24h) ---"
sudo journalctl -t sudo --since "24 hours ago" 2>/dev/null | tail -20
echo
echo "--- Contas expiradas ou a expirar em 7 dias ---"
for user in $(awk -F: '$3 >= 1000 && $3 != 65534 {print $1}' /etc/passwd); do
expire=$(sudo chage -l "$user" 2>/dev/null | grep "Account expires" | awk -F: '{print $2}' | xargs)
if [ "$expire" != "never" ] && [ -n "$expire" ]; then
echo " $user expires: $expire"
fi
done
11. FAQ para Sysadmins
1. Devo desactivar completamente a conta root?
Não — a conta root não pode ser removida (UID 0 é necessário para o sistema). O que se faz é desactivar o login root: PermitRootLogin no no SSH, e sudo passwd -l root para bloquear a password. Mantém acesso via sudo su - se necessário.
2. adduser ou useradd?
adduser em Ubuntu/Debian (interactivo, cria tudo automaticamente). useradd em RHEL/CentOS ou scripts (low-level, mais controlo). Ambos resultam no mesmo — a diferença é a experiência (man useradd, Arch Wiki — Users and groups).
3. NOPASSWD no sudo é seguro?
Em CI/CD (Ansible, GitHub Actions) é necessário. Restrinja a comandos específicos: NOPASSWD: /usr/bin/systemctl restart nginx. Nunca use NOPASSWD: ALL excepto para Ansible com chave SSH restrita por command= e from=.
4. Com que frequência devo mudar a minha password?
90 dias é o standard NIST/enterprise. Mas mais importante que a rotação é a qualidade — uma password forte de 12+ caracteres com 3 classes é mais segura que uma fraca mudada mensalmente. Considere chaves SSH + MFA para acesso administrativo (NIST SP 800-63B).
5. Como revogar acesso rapidamente?
# Bloquear imediatamente sudo usermod -L username # bloquear password sudo usermod -s /usr/sbin/nologin username # sem shell sudo pkill -u username # terminar sessões activas # Remover acesso sudo sudo rm /etc/sudoers.d/username # Remover chaves SSH sudo rm /home/username/.ssh/authorized_keys
6. O que é um utilizador de sistema e quando usar?
Utilizadores de sistema (UID < 1000, criados com useradd -r) são para serviços — não têm home directory nem shell. Use para qualquer serviço que precise de correr sob identidade própria: backup-svc, monitoring, nginx. Nunca corra serviços como root.
7. Como partilhar ficheiros entre utilizadores com permissões correctas?
Crie um grupo partilhado, adicione os utilizadores, e use permissões de grupo: sudo groupadd team && sudo usermod -aG team admin deploy && sudo chown -R :team /opt/shared && sudo chmod 2770 /opt/shared. O bit 2 (setgid) garante que novos ficheiros herdam o grupo.
8. Como ver se um utilizador tem acesso sudo?
# Listar privilégios sudo de um utilizador sudo -l -U admin # User admin may run the following commands on servidor: # (ALL:ALL) ALL # Ver todos os ficheiros em /etc/sudoers.d/ sudo ls -la /etc/sudoers.d/ sudo grep -r "" /etc/sudoers.d/
12. Erros Comuns e Resoluções Rápidas
| Sintoma | Causa provável | Comando de resolução |
|---|---|---|
| useradd: command not found | Em sistemas minimalistas | sudo apt install passwd ou sudo dnf install shadow-utils |
| user is not in the sudoers file | Utilizador não tem sudo configurado | sudo usermod -aG sudo username (Ubuntu) ou visudo |
| visudo: syntax error near line X | Erro de sintaxe no sudoers | visudo mostra o erro — corrigir e guardar |
| Permission denied (publickey) após criar user | Permissões .ssh erradas | chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys |
| usermod: user is currently used by process | Utilizador tem processos activos | sudo pkill -u username e tentar novamente |
| sudo: no tty present and no askpass program | Sudo sem terminal (cron, script) | Usar NOPASSWD: no sudoers para esse comando |
| Cannot lock /etc/passwd | Outro processo a editar utilizadores | Esperar, ou sudo rm /etc/passwd.lock |
| Your account has expired | chage -E passou | sudo chage -E -1 username (remover expiração) |
| You must change your password immediately | passwd -e foi executado | Mudar password: passwd |
| Authentication token manipulation error | PAM não consegue ler/escrever shadow | Verificar permissões /etc/shadow (640, root:shadow) |
| adduser: The user already exists | UID ou nome já em uso | grep username /etc/passwd para verificar |
| sudo: unable to resolve host | Hostname não resolve em /etc/hosts | Adicionar hostname a /etc/hosts: 127.0.1.1 hostname |
Artigos Relacionados
- SSH: Configuração, Hardening e Diagnóstico para Sysadmins
- Configuração e Diagnóstico de NIC em Linux
- Diagnóstico de Kernel Logs Linux
- Diagnóstico de CPU Linux
- Diagnóstico de Memória Linux
- Diagnóstico de Processos e Serviços Linux
- Ferramentas Avançadas de Diagnóstico Linux
- Passkeys (Chaves de Acesso): Substituir Passwords com FIDO2
- Garantir Segurança do WSL2: Configurações para Sysadmins
- NIS2 em 2026: Checklist em 90 Dias para Sysadmins
