Administracao de Seguranca: SUID, lsof, ulimit, sudo

Administracao de Seguranca: SUID, lsof, ulimit, sudo

O Que Voce 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 diferenca 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 e o nucleo do objetivo 110.1 do LPIC-1 "Realizar tarefas de administracao de seguranca". Cobre sistematicamente auditoria de arquivos SUID (um foco de escalacao de privilegios), ulimit para prevenir esgotamento de recursos, e sudo para privilegio minimo.

Por Que Auditar Arquivos SUID e Importante

Um executavel com SUID definido roda com as permissoes do proprietario do arquivo (frequentemente root), nao do usuario que o executa. Uma vulnerabilidade leva diretamente a escalacao de privilegios, entao auditoria periodica e essencial.

Bit Octal Significado Comando de busca
SUID 4000 Executar com permissoes do proprietario (ex. passwd) find / -perm -4000
SGID 2000 Executar com permissoes do grupo / heranca de diretorio find / -perm -2000
Sticky 1000 Impedir exclusao de arquivos alheios em /tmp etc. find / -perm -1000

O - inicial em -perm significa "todos os bits especificados estao definidos". -perm 4000 (sem menos) significa "permissoes correspondem exatamente", e -perm /4000 significa "qualquer um dos bits esta definido" -- os comportamentos diferem, entao tenha cuidado.

Arquivos SUID inesperados (especialmente sob /tmp ou diretorios home de usuarios) podem ser um ponto de entrada para escalacao de privilegios. 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 simbolicas -perm -u=s (SUID) e -perm -g=s (SGID) fazem o mesmo. 2>/dev/null suprime erros de diretorios que voce nao 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 especifico, e -u user lista arquivos abertos de um usuario. Voce tambem 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 tem 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 e o numero de arquivos que podem estar abertos, -u e o numero de processos do usuario. -S e o limite soft (valor atual) e -H e o limite hard (teto). Um usuario comum pode alterar o limite soft ate 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 e o comando dedicado que edita /etc/sudoers com verificacao de sintaxe. %groupname concede privilegios a um grupo, e NOPASSWD: pula o prompt de senha. Apos editar, verifique com sudo -l como o usuario alvo.

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

su vs su -, e Auditoria de Login

A diferenca entre su e su - e se variaveis de ambiente e o diretorio atual sao mantidos. su user (sem opcao) troca mantendo muito do ambiente do usuario original, enquanto su - user (com o hifen, mesmo que su -l) inicia um shell de login e carrega totalmente o PATH, HOME e arquivos de inicializacao do usuario alvo. Ao trocar para root para trabalhar, su - e 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 Usuarios atualmente logados /var/run/utmp
w Usuarios logados + seus processos e carga /var/run/utmp
last Historico de login (incluindo reinicializacoes) /var/log/wtmp
lastlog Ultimo horario de login por usuario /var/log/lastlog

last e lastlog sao o basico para rastrear logins suspeitos. Combine com chage -l user para verificar expiracao 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 voce nao possui sem permissao pode constituir acesso nao autorizado, entao use-o apenas contra alvos autorizados.

Erros Comuns e Correcoes

  • Quebrar sudoers editando diretamente: Salvar sintaxe ruim com vi /etc/sudoers torna o sudo completamente inutilizavel. Sempre use visudo. Se quebrado, repare via pkexec ou modo de resgate.
  • Confundir limites soft e hard: Um usuario comum tentando elevar ulimit -n alem 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 proprio script cria uma brecha de escalacao de privilegios. SUID em shell scripts e ignorado em muitos ambientes, mas vulnerabilidades em comandos dependentes permanecem.
  • Confundir su e su -: Tornar-se root com su simples mantem o ambiente original, arriscando executar um comando nao intencional do PATH como root. Use su - para trabalho administrativo.
  • Confundir find -perm 4000 com -perm -4000: Sem o menos significa "correspondencia exata", entao um arquivo SUID real como rwsr-xr-x nao e correspondido. O menos inicial e necessario para auditoria.

Solucao de Problemas

Sintoma: "device is busy" ao desmontar

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

Verificacao:

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

Solucao: Identifique o processo e encerre-o graciosamente. Apenas como ultimo recurso, mate forcadamente com fuser -k -m /mnt/data, apos confirmar os alvos.

Sintoma: Uma aplicacao trava com "Too many open files"

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

Verificacao:

ulimit -Sn
lsof -p PID | wc -l

Solucao: Eleve o limite soft para aquele shell com ulimit -n. Para uma correcao persistente, adicione nofile ao /etc/security/limits.conf e faca login novamente para aplicar.

Sintoma: sudo pede senha toda vez, bloqueando automacao

Causa: NOPASSWD: nao esta definido para o usuario/comando alvo

Verificacao:

sudo -l

Solucao: Use visudo para conceder NOPASSWD: limitado a comandos especificos. Evite NOPASSWD incondicional em ALL por seguranca; restrinja aos comandos necessarios.

Lista de Verificacao de Conclusao

  • [ ] 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 diferenca entre limite soft e hard com ulimit -a
  • [ ] Confirmou o fluxo seguro de edicao de sudoers com visudo
  • [ ] Confirmou auditoria de login com who / w / last

Resumo

Cenario Comando Proposito
Auditoria SUID/SGID find / -perm -4000 -type f Revelar risco de escalacao de privilegios
Verificacao 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
Configuracao sudo visudo Edicao de sudoers com verificacao de sintaxe
Auditoria de login who / w / last Verificar atividade e historico de login

Administracao de seguranca se baseia em dois pilares: minimizar privilegios e tornar anomalias visiveis. Apos dominar auditoria SUID, sudo de privilegio minimo e protecao de recursos com ulimit, combine-os com criptografia e fortalecimento de host para completar suas defesas.

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

Pratica