Administração de Segurança: SUID, lsof, ulimit, sudo

Administração de Segurança: SUID, lsof, ulimit, sudo

O Que Você Vai Conquistar

  • Encontrar arquivos perigosos com SUID / SGID definido usando find
  • Identificar arquivos abertos e portas de rede com lsof
  • Verificar e parar processos usando um arquivo ou sistema de arquivos com fuser
  • Entender a diferença entre limites soft e hard e restringir recursos com ulimit
  • Configurar sudo / sudoers de forma segura com visudo
  • Auditar atividade de login com who / w / last

Este é o núcleo do objetivo 110.1 do LPIC-1 "Realizar tarefas de administração de segurança". Cobre sistematicamente auditoria de arquivos SUID (um foco de escalação de privilégios), ulimit para prevenir esgotamento de recursos, e sudo para privilégio mínimo.

Por Que Auditar Arquivos SUID é Importante

Um executável com SUID definido roda com as permissões do proprietário do arquivo (frequentemente root), não do usuário que o executa. Uma vulnerabilidade leva diretamente à escalação de privilégios, então auditoria periódica é essencial.

Bit Octal Significado Comando de busca
SUID 4000 Executar com permissões do proprietário (ex. passwd) find / -perm -4000
SGID 2000 Executar com permissões do grupo / herança de diretório find / -perm -2000
Sticky 1000 Impedir exclusão de arquivos alheios em /tmp etc. find / -perm -1000

O - inicial em -perm significa "todos os bits especificados estão definidos". -perm 4000 (sem menos) significa "permissões correspondem exatamente", e -perm /4000 significa "qualquer um dos bits está definido" -- os comportamentos diferem, então tenha cuidado.

Arquivos SUID inesperados (especialmente sob /tmp ou diretórios home de usuários) podem ser um ponto de entrada para escalação de privilégios. Capture um baseline com find e audite o diff periodicamente.

Passo a Passo

Passo 1: Encontrar arquivos SUID / SGID

find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
find / -perm -u=s -o -perm -g=s -type f 2>/dev/null
/usr/bin/passwd
/usr/bin/sudo
/usr/bin/su
/usr/bin/mount
/usr/bin/chsh

-perm -4000 extrai arquivos com SUID e -perm -2000 aqueles com SGID. As formas simbólicas -perm -u=s (SUID) e -perm -g=s (SGID) fazem o mesmo. 2>/dev/null suprime erros de diretórios que você não pode ler.

Passo 2: Inspecionar arquivos abertos e portas com lsof

lsof -i :22
lsof -p 1234
lsof -u alice
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     812 root    3u  IPv4  18293      0t0  TCP *:ssh (LISTEN)

lsof -i :22 lista processos usando a porta 22, -p PID lista arquivos abertos por um processo específico, e -u user lista arquivos abertos de um usuário. Você também pode filtrar por protocolo ou host como -i TCP ou -i @host.

Passo 3: Identificar e parar processos com fuser

fuser -v /var/log/syslog
fuser -m /mnt/data
fuser -k -m /mnt/data
                     USER        PID ACCESS COMMAND
/var/log/syslog:     root        812 F.... rsyslogd

fuser -v file mostra processos que têm o arquivo aberto em um estilo semelhante ao ps. -m trata o argumento como um sistema de arquivos montado e direciona todos os processos usando arquivos naquele sistema de arquivos. -k envia SIGKILL para eles. Use para liberar "device is busy" antes de desmontar.

Passo 4: Verificar e definir limites de recursos com ulimit

ulimit -a
ulimit -Sn
ulimit -Hn
ulimit -n 2048
open files                          (-n) 1024
max user processes                  (-u) 7860
...

ulimit -a lista todos os limites. -n é o número de arquivos que podem estar abertos, -u é o número de processos do usuário. -S é o limite soft (valor atual) e -H é o limite hard (teto). Um usuário comum pode alterar o limite soft até o limite hard, mas somente root pode elevar o limite hard.

Para tornar persistente, edite /etc/security/limits.conf.

# /etc/security/limits.conf
# <domain> <type> <item> <value>
alice      soft    nofile  4096
alice      hard    nofile  8192
@developers hard   nproc   100

Especifique soft / hard para type e itens como nofile (contagem de arquivos) ou nproc (contagem de processos) para item. @groupname aplica o limite por grupo.

Passo 5: Configurar sudo com visudo

visudo
# /etc/sudoers
alice       ALL=(ALL:ALL) ALL
%admin      ALL=(ALL) ALL
%developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

visudo é o comando dedicado que edita /etc/sudoers com verificação de sintaxe. %groupname concede privilégios a um grupo, e NOPASSWD: pula o prompt de senha. Após editar, verifique com sudo -l como o usuário alvo.

sudo -l
User alice may run the following commands on host:
    (ALL : ALL) ALL

su vs su -, e Auditoria de Login

A diferença entre su e su - é se variáveis de ambiente e o diretório atual são mantidos. su user (sem opção) troca mantendo muito do ambiente do usuário original, enquanto su - user (com o hífen, mesmo que su -l) inicia um shell de login e carrega totalmente o PATH, HOME e arquivos de inicialização do usuário alvo. Ao trocar para root para trabalhar, su - é mais seguro e evita executar o comando errado devido a um PATH desatualizado.

Use os seguintes comandos para auditar atividade de login.

Comando O que mostra Fonte de dados
who Usuários atualmente logados /var/run/utmp
w Usuários logados + seus processos e carga /var/run/utmp
last Histórico de login (incluindo reinicializações) /var/log/wtmp
lastlog Último horário de login por usuário /var/log/lastlog

last e lastlog são o básico para rastrear logins suspeitos. Combine com chage -l user para verificar expiração de senha e inventariar contas inativas.

chage -l alice
Last password change                : May 01, 2026
Password expires                    : Jul 30, 2026
Account expires                     : never

No lado da rede, nmap pode escanear portas abertas de um host (ex. nmap localhost). Escanear hosts que você não possui sem permissão pode constituir acesso não autorizado, então use-o apenas contra alvos autorizados.

Erros Comuns e Correções

  • Quebrar sudoers editando diretamente: Salvar sintaxe ruim com vi /etc/sudoers torna o sudo completamente inutilizável. Sempre use visudo. Se quebrado, repare via pkexec ou modo de resgate.
  • Confundir limites soft e hard: Um usuário comum tentando elevar ulimit -n além do limite hard recebe Operation not permitted. Elevar o limite hard requer root mais /etc/security/limits.conf.
  • Subestimar o risco de SUID: Adicionar SUID descuidadamente ao seu próprio script cria uma brecha de escalação de privilégios. SUID em shell scripts é ignorado em muitos ambientes, mas vulnerabilidades em comandos dependentes permanecem.
  • Confundir su e su -: Tornar-se root com su simples mantém o ambiente original, arriscando executar um comando não intencional do PATH como root. Use su - para trabalho administrativo.
  • Confundir find -perm 4000 com -perm -4000: Sem o menos significa "correspondência exata", então um arquivo SUID real como rwsr-xr-x não é correspondido. O menos inicial é necessário para auditoria.

Solução de Problemas

Sintoma: "device is busy" ao desmontar

Causa: Um processo ainda tem um arquivo aberto naquele sistema de arquivos

Verificação:

fuser -vm /mnt/data
lsof +D /mnt/data

Solução: Identifique o processo e encerre-o graciosamente. Apenas como último recurso, mate forçadamente com fuser -k -m /mnt/data, após confirmar os alvos.

Sintoma: Uma aplicação trava com "Too many open files"

Causa: A contagem de arquivos abertos atingiu o limite soft (nofile)

Verificação:

ulimit -Sn
lsof -p PID | wc -l

Solução: Eleve o limite soft para aquele shell com ulimit -n. Para uma correção persistente, adicione nofile ao /etc/security/limits.conf e faça login novamente para aplicar.

Sintoma: sudo pede senha toda vez, bloqueando automação

Causa: NOPASSWD: não está definido para o usuário/comando alvo

Verificação:

sudo -l

Solução: Use visudo para conceder NOPASSWD: limitado a comandos específicos. Evite NOPASSWD incondicional em ALL por segurança; restrinja aos comandos necessários.

Lista de Verificação de Conclusão

  • [ ] Listou arquivos SUID com find / -perm -4000 -type f
  • [ ] Verificou portas em escuta com lsof -i
  • [ ] Confirmou que consegue identificar processos em uso com fuser -m
  • [ ] Entendeu a diferença entre limite soft e hard com ulimit -a
  • [ ] Confirmou o fluxo seguro de edição de sudoers com visudo
  • [ ] Confirmou auditoria de login com who / w / last

Resumo

Cenário Comando Propósito
Auditoria SUID/SGID find / -perm -4000 -type f Revelar risco de escalação de privilégios
Verificação de porta lsof -i :PORT Identificar processos em escuta
Processos em uso fuser -vm /mount Encontrar o que bloqueia uma desmontagem
Limites de recursos ulimit -Sn / -Hn Verificar/definir limites soft e hard
Configuração sudo visudo Edição de sudoers com verificação de sintaxe
Auditoria de login who / w / last Verificar atividade e histórico de login

Administração de segurança se baseia em dois pilares: minimizar privilégios e tornar anomalias visíveis. Após dominar auditoria SUID, sudo de privilégio mínimo e proteção de recursos com ulimit, combine-os com criptografia e fortalecimento de host para completar suas defesas.

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 Relacionados do LPIC-1

Prática