O princípio do menor privilégio — ou Least Privilege — é uma das pedras angulares da segurança da informação. No contexto de sistemas Linux, ele significa que usuários, processos e programas devem ter apenas os privilégios estritamente necessários para executar suas funções. A aplicação consistente do least privilege Linux ajuda a mitigar vulnerabilidades, reduzir a superfície de ataque e conter possíveis danos causados por falhas ou ataques bem-sucedidos.
Este artigo oferece um guia completo, técnico e didático sobre como aplicar o least privilege no Linux, desde o gerenciamento básico de usuários até o uso avançado de ferramentas como ACLs, capabilities, PAM, SELinux e AppArmor. Vamos explorar cada conceito de forma analítica e profunda, sempre com foco na prática e na segurança real dos sistemas.
O que é o princípio do menor privilégio e por que ele é crucial para a segurança Linux?
Definição e benefícios
O princípio do menor privilégio estabelece que nenhum usuário ou processo deve ter mais permissões do que o necessário. Isso se aplica a arquivos, comandos, rede, execução de binários e acesso a dispositivos.
Benefícios principais:
- Redução da superfície de ataque: limita a exposição de recursos críticos.
- Confinamento de falhas: se um processo for comprometido, o impacto será restrito.
- Prevenção contra escalonamento de privilégios: usuários comuns não podem se tornar root sem autorização.
- Conformidade com normas de segurança: como NIST SP 800-53 e ISO/IEC 27001.
Consequências de não aplicar o Least Privilege
- Execução inadvertida de comandos críticos.
- Processos maliciosos ganham acesso a arquivos sensíveis.
- Auditoria mais difícil: muitos privilégios diluem a responsabilidade.
- Maior risco de rootkits e escalation exploits.
Fundamentos das permissões Linux: usuários, grupos e outros

UID, GID e o modelo tradicional de permissões (rwx)
No Linux, tudo é arquivo. Cada arquivo/diretório possui:
- Um usuário dono (UID).
- Um grupo associado (GID).
- Permissões para usuário, grupo e outros, representadas por letras
r
(leitura),w
(escrita),x
(execução).
Exemplo com ls -l
:
-rwxr-x--- 1 maria desenvolvedores 10320 jul 10 08:00 script.sh
Explicação:
maria
pode ler, escrever e executar.- O grupo
desenvolvedores
pode ler e executar. - “Outros” não têm nenhum acesso.
Comandos básicos de gerenciamento de usuários e grupos Linux
Criar usuário:
sudo useradd -m joao
Cria o usuário joao
com diretório home.
Modificar grupo primário:
sudo usermod -g engenheiros joao
Criar grupo:
sudo groupadd suporte
Adicionar usuário a grupo secundário:
sudo gpasswd -a joao suporte
Remover usuário de grupo:
sudo gpasswd -d joao suporte
Excluir usuário:
sudo userdel -r joao
Manipulação de permissões Linux segurança (chmod, chown, chgrp)
Alterar permissões com chmod
:
chmod 750 script.sh
Significa:
7
(usuário): rwx5
(grupo): r-x0
(outros): —
Alterar dono do arquivo com chown
:
sudo chown joao:engenheiros script.sh
Alterar apenas grupo com chgrp
:
sudo chgrp suporte relatório.pdf
SUID, SGID e Sticky Bit: conceitos e riscos
- SUID (
chmod u+s
): executa com permissões do dono (ex:/usr/bin/passwd
). - SGID (
chmod g+s
): herda o grupo do diretório. - Sticky Bit (
chmod +t
): impede que usuários removam arquivos de outros em pastas públicas (ex:/tmp
).
Atenção: o uso indevido de SUID/SGID pode abrir brechas de escalonamento de privilégios.
Gerenciamento avançado de permissões para least privilege Linux
ACLs (Access Control Lists)
Permitem permissões além do modelo rwx
.
Definir ACL:
setfacl -m u:joao:rw relatório.txt
Ver ACLs:
getfacl relatório.txt
Exemplo de saída:
# file: relatório.txt
# owner: maria
# group: engenharia
user::rw-
user:joao:rw-
group::r--
mask::rw-
other::---
Sudoers: acesso privilegiado seguro
Editar com segurança:
sudo visudo
Exemplo de regra mínima:
joao ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart apache2
João pode reiniciar o Apache sem senha, mas não tem acesso irrestrito.
Agrupar comandos:
Cmnd_Alias WEB_CMDS = /usr/bin/systemctl restart apache2, /usr/bin/systemctl status apache2
Depois:
joao ALL=(ALL) NOPASSWD: WEB_CMDS
Capabilities: granularidade sem SUID
Permissões específicas atribuídas a binários.
Ver capabilities:
getcap /usr/bin/ping
Saída esperada:
/usr/bin/ping = cap_net_raw+ep
Atribuir capacidade:
sudo setcap cap_net_bind_service=+ep /usr/bin/python3
chroot: prisão de processo
Cria um ambiente isolado com acesso apenas a arquivos selecionados.
Exemplo:
sudo chroot /opt/jail /bin/bash
Ideal para FTP, serviços legados ou ambientes de teste.
Ferramentas e frameworks para reforçar a segurança de permissões Linux
PAM (Pluggable Authentication Modules)
Controla autenticação, sessões e permissões em /etc/pam.d
.
Exemplo de restrição por horário (pam_time):
login;*;joao;!Al1700-0800
Impede login fora do horário comercial.
SELinux e AppArmor
Ambos implementam controle de acesso obrigatório (MAC).
Característica | SELinux | AppArmor |
---|---|---|
Política | Baseada em contexto de labels | Baseada em caminhos de arquivos |
Complexidade | Alta | Moderada |
Flexibilidade | Máxima | Boa |
Adoção | Red Hat, Fedora | Ubuntu, Debian |
Ambos complementam o least privilege Linux ao controlar o que processos podem fazer, mesmo como root.
Ferramentas de auditoria de permissões
Estratégias para implementar o least privilege no gerenciamento de usuários e grupos Linux
- Mapeie funções e responsabilidades:
- Crie grupos por função (ex:
dev
,ops
,auditoria
).
- Crie grupos por função (ex:
- Segregue funções críticas:
- Administração de sistema ≠ administração de banco de dados.
- Faça revisões periódicas:
- Use scripts ou
auditd
para listar usuários com sudo/root.
- Use scripts ou
- Automatize concessão/revogação:
- Integre com LDAP ou scripts de provisionamento.
- Monitore atividades privilegiadas:
- Registre
sudo
,su
,login
, e acesse via/var/log/auth.log
.
- Registre
Casos de uso e exemplos práticos
Servidores web (Nginx/Apache)
- Crie usuário exclusivo (
www-data
). - Restrinja acesso ao
/var/www
apenas para este usuário. - Use
setfacl
para liberar temporariamente a edição por um dev.
Bancos de dados (PostgreSQL/MySQL)
- Nunca rode como root.
- Crie roles com privilégios mínimos (
SELECT
,INSERT
,NO DROP
). - Integre auditoria com PAM ou AppArmor.
Contêineres (Docker/Podman)
- Nunca use
root
dentro do contêiner. - Use
USER
no Dockerfile. - Combine com
seccomp
,AppArmor
ecap_drop
.
Usuários de desenvolvimento
- Acesso limitado a recursos produtivos.
- Uso de sudo apenas para manutenção básica (sem shell root).
Glossário analítico
Root: usuário administrativo com acesso irrestrito. Equivalente ao “diretor geral” do sistema.
UID/GID: identificadores de usuários e grupos no sistema.
SUID/SGID: bits especiais que executam arquivos com os privilégios do dono/grupo.
ACL: lista de permissões adicionais por usuário/grupo para arquivos.
Capabilities: sistema moderno para atribuir poderes específicos sem SUID.
PAM: framework de autenticação modular.
SELinux/AppArmor: sistemas de controle de acesso obrigatórios (MAC) que restringem comportamentos, mesmo de processos root.
Least privilege: garantir que cada elemento do sistema (usuário ou programa) tenha apenas o mínimo de acesso necessário.
Conclusão
A aplicação do least privilege Linux é uma prática essencial para qualquer administrador de sistemas, desenvolvedor ou equipe de segurança. Compreender e aplicar corretamente os conceitos de permissões Linux segurança e o gerenciamento de usuários e grupos Linux é o primeiro passo para construir sistemas seguros, auditáveis e resilientes.
Ao combinar ferramentas básicas (chmod, chown, sudo) com técnicas avançadas (ACLs, capabilities, SELinux), é possível implementar políticas rigorosas de privilégio mínimo sem comprometer a funcionalidade.