As permissões tradicionais no Linux usam os bits r (read), w (write) e x (execute) para usuário, grupo e outros. Mas em ambientes corporativos e servidores complexos, isso nem sempre é suficiente. Nesta aula, vamos explorar ACLs (Access Control Lists) para autorizações granulares, entender cenários práticos em servidores e aprender sobre SUID e SGID, dois bits especiais que alteram o comportamento de execução de programas.
2. ACLs na Prática
2.1. O que são ACLs?
- Definição: listas que permitem atribuir permissões a múltiplos usuários e grupos além dos três conjuntos básicos.
- Quando usar: quando você precisa dar acesso a um arquivo ou diretório para vários usuários ou grupos sem mudar o proprietário ou o grupo principal.
2.2. Comandos essenciais
- Instalar suporte (se necessário):
sudo apt install acl # Debian/Ubuntu
sudo yum install acl # RHEL/CentOS
Verificar se o sistema de arquivos suporta ACLs:
mount | grep acl
Habilitar ACLs no fstab
(exemplo ext4):
/dev/sda1 /data ext4 defaults,acl 0 2
Visualizar ACLs de um arquivo/diretório:
getfacl arquivo.txt
Adicionar permissão ACL:
setfacl -m u:alice:rw arquivo.txt # usuário alice ganha leitura e escrita
setfacl -m g:devteam:rx /srv/projeto # grupo devteam ganha leitura e execução
Remover uma entrada ACL:
setfacl -x u:alice arquivo.txt
Restaurar permissões para o modo tradicional:
setfacl -b arquivo.txt
2.3. Exemplos em servidores
- Compartilhar logs: conceder acesso de leitura a um grupo de análise sem mudar o dono dos arquivos gerados pelo daemon.
- Diretórios de projetos: membros de times diferentes com permissões específicas de leitura/escrita em subpastas.
- Ambientes multiusuário: home compartilhada de dados onde cada usuário tem acesso apenas a suas pastas.
3. Bits SUID e SGID
3.1. O que são?
- SUID (Set User ID): faz com que o executável rode com o UID do dono do arquivo, não de quem o invocou.
- SGID (Set Group ID): faz com que o processo assuma o GID do grupo dono. Em diretórios, SGID faz com que novos arquivos herdem o grupo do diretório.
3.2. Sintaxe e exemplos
- Marcar SUID:
chmod u+s /usr/bin/passwd
ls -l /usr/bin/passwd
# -rwsr-xr-x root root
Exemplo: passwd
permite alterar senhas mesmo se você não for root, pois roda como root.
Marcar SGID em arquivo:
chmod g+s /usr/local/bin/script.sh
ls -l /usr/local/bin/script.sh
# -rwxr-sr-x root devteam
Marcar SGID em diretório:
chmod g+s /srv/shared
ls -ld /srv/shared
# drwxrwsr-x root devteam
Novos arquivos em /srv/shared herdarão o grupo devteam.
3.3. Cuidados e cascas de uso
- Riscos: SUID em binários mal escritos pode permitir escalonamento de privilégio. Sempre revise o código ou use binários confiáveis.
- Melhor prática: limite SUID/SGID apenas a casos necessários (como
passwd
,sudo
,mount
em alguns sistemas). - Auditoria:
find / -perm /6000 -type f 2>/dev/null
Lista todos os arquivos com SUID ou SGID definidos.
4. Exercícios Práticos
- Configurar ACL: crie um diretório
projetoX
, defina o dono como você e adicione permissão de escrita para o usuáriobob
sem alterar o dono. - Testar SUID: encontre um binário SUID no seu sistema (
find / -perm -4000
) e verifique se ele roda com privilégios diferentes usandops
. - SGID em diretório: crie um diretório de equipe, aplique SGID, e veja o grupo de novos arquivos criados por diferentes usuários.
- Limpar ACLs: aplique e depois remova ACLs de um arquivo, confirmando com
getfacl
.
Dica de Ouro
Propagar ACLs Recursivas
Para aplicar ACLs em uma árvore de diretórios inteira e fazê-las padrão para novos arquivos:
setfacl -R -m d:u:devops:rx /srv/app
setfacl -R -m u:devops:rx /srv/app
-R
: recursivo.d:
: define como padrão para novos itens.
Assim, qualquer novo arquivo ou pasta dentro de/srv/app
já terá as permissões corretas para o grupodevops
.