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/sudoersde forma segura comvisudo - 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.
fuser -k -m mata forcadamente todos os processos usando o sistema de arquivos. Se voce direcionar a montagem errada, processos nao relacionados sao pegos tambem. Sempre confirme os alvos executando sem -k primeiro.
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
Editar /etc/sudoers diretamente com vi permite salvar um erro de sintaxe, o que quebra o sudo inteiramente (voce nao consegue nem se tornar root). Sempre use visudo. Ele valida a sintaxe ao salvar e solicita que voce edite novamente se houver um erro.
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
sudoerseditando diretamente: Salvar sintaxe ruim comvi /etc/sudoerstorna o sudo completamente inutilizavel. Sempre usevisudo. Se quebrado, repare viapkexecou modo de resgate. - Confundir limites soft e hard: Um usuario comum tentando elevar
ulimit -nalem do limite hard recebeOperation 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
suesu -: Tornar-se root comsusimples mantem o ambiente original, arriscando executar um comando nao intencional doPATHcomo root. Usesu -para trabalho administrativo. - Confundir
find -perm 4000com-perm -4000: Sem o menos significa "correspondencia exata", entao um arquivo SUID real comorwsr-xr-xnao 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.