Permissões no Linux (chmod, chown, setgid) e Estrutura de Pastas Explicadas para Equipas Web
O Comando do Desespero: Porque Muitos Programadores Usam chmod 777
Quase todos os programadores web já passaram por isto: uma imagem enviada por um utilizador não grava no disco, uma pasta de cache devolve um erro de permissão negada (permission denied), ou um script de deploy falha a meio. Pressionado pelo prazo de entrega, o programador abre a consola SSH e executa o comando mais perigoso da história do Linux: chmod -R 777 /var/www/meu-site.
Como por magia, a aplicação começa logo a funcionar. O problema parece resolvido. No entanto, na realidade, esse comando destruiu o modelo de segurança do sistema operativo. Ao definires permissões 777 (rwxrwxrwx), deste autorização a qualquer processo que corra no servidor—incluindo scripts de cron, tarefas secundárias de bases de dados e bibliotecas comprometidas—para ler dados confidenciais, alterar ficheiros de código e injetar executáveis maliciosos.
O DESASTRE DE SEGURANÇA DO COMANDO CHMOD -R 777
- O PROGRAMADOR EXECUTA: chmod -R 777 /var/www/app
- PASTA /var/www/app/
- Dono (User): rwx (Leitura, Escrita, Execução)
- Grupo (Group): rwx (Leitura, Escrita, Execução)
- Outros (Other):rwx (QUALQUER PROCESSO DO SERVIDOR TEM ACESSO TOTAL!)
- Script Malicioso Altera ficheiro index.php
- Módulo Invasor Lê o Ficheiro .env com as Senhas
- O Atacante Assume o Controlo do Teu Servidor!
Na Webxtek, defendemos uma disciplina rigorosa de sistemas. Através da nossa consultoria técnica, ajudamos as equipas a substituir atalhos arriscados por uma gestão limpa de utilizadores, herança de grupos com setgid e regras de controlo granular de acessos (ACLs).
Onde Devem Viver os Teus Ficheiros: A Estrutura de Pastas do Linux (FHS)
O padrão de hierarquia do sistema de ficheiros (Filesystem Hierarchy Standard ou FHS) no Debian define a função de cada pasta com clareza:
HIERARQUIA DE PASTAS NO LINUX (FHS)
- / (Raiz do Sistema) etc/ → Ficheiros de configuração globais (nginx.conf, sshd_config) var/ → Dados dinâmicos de execução log/ → Registos e logs do sistema (journald, access.log) www/ → A pasta recomendada para websites (/var/www/meu-site) opt/ → Aplicações e stacks completas autónomas (Docker stacks) usr/ → Programas e bibliotecas do sistema (/usr/bin) tmp/ → Ficheiros temporários (apagados no arranque; sem execução) home/ → Pastas pessoais dos utilizadores (/home/programador)
Colocar código em /root ou /tmp é uma falha grave de arquitetura. O código de produção deve viver em /var/www ou /opt, montado com privilégios rigorosos.
O Funcionamento das Permissões no Linux: Modo Octal e Tríades
Cada ficheiro e pasta no Linux tem permissões divididas em três entidades:
- Dono (User - u): A conta de utilizador que criou o ficheiro.
- Grupo (Group - g): O grupo de utilizadores atribuído ao ficheiro.
- Outros (Other - o): Todos os outros utilizadores do sistema operativo.
As permissões calculam-se somando três valores (Leitura = 4, Escrita = 2, Execução = 1):
MATRIZ DE CÁLCULO DE PERMISSÕES OCTAIS
- BIT DE PERMISSÃO VALOR OCTAL SIGNIFICADO EM FICHEIROS SIGNIFICADO EM PASTAS r (Read - Leitura) 4 w (Write - Escrita)2 x (Execute) 1
- Consegue ver o conteúdo Consegue listar ficheiros: Consegue alterar ficheiro Consegue criar/apagar ficheiros • Consegue correr programa Consegue entrar na pasta (cd)
- EXEMPLO: Modo 755 (rwxr-xr-x)
- Dono (rwx) = 4 + 2 + 1 = 7 (Controlo Total)
- Grupo (r-x) = 4 + 0 + 1 = 5 (Apenas Lê e Entra)
- Outros (r-x) = 4 + 0 + 1 = 5 (Apenas Lê e Entra)
- EXEMPLO: Modo 644 (rw-r–r–)
- Dono (rw-) = 4 + 2 + 0 = 6 (Lê e Altera)
- Grupo (r–) = 4 + 0 + 0 = 4 (Apenas Lê)
- Outros (r–) = 4 + 0 + 0 = 4 (Apenas Lê)
Para uma aplicação web, a regra de ouro de segurança é: Pastas devem ter permissão 755 (ou 750), ficheiros normais devem ter 644 (ou 640), e ficheiros com senhas (.env) devem ter 600.
# Aplica permissões recomendadas a pastas e ficheiros de forma recursiva
find /var/www/meu-site -type d -exec chmod 755 {} +
find /var/www/meu-site -type f -exec chmod 644 {} +
# Tranca o ficheiro com senhas para que só o dono o consiga ler
chmod 600 /var/www/meu-site/.env
Trabalho em Equipa sem Erros: O Poder do setgid (chmod g+s)
Um problema clássico acontece quando tu publicas código com o utilizador deployer, mas o teu servidor web (www-data ou nginx) precisa de gravar ficheiros de uploads na mesma pasta. Quando o deployer cria um ficheiro, ele fica com o grupo deployer, impedindo o servidor web de lhe mexer.
A solução profissional não é usar chmod 777, mas sim ativar o setgid (Set Group ID).
COMO FUNCIONA A HERANÇA COM SETGID
- Cria um Grupo Partilhado: grupoweb
- Adiciona o ‘deployer’ e o ‘www-data’ ao ‘grupoweb’
- Altera o Grupo da Pasta chown -R deployer: grupoweb /var/www/meu-site/uploads
- Ativa o Bit setgid: chmod g+s /var/www/meu-site/uploads (Modo 2775)
- Qualquer Novo Ficheiro Criado Herda Automaticamente o ‘grupoweb’!: (Tanto o deployer como o servidor web conseguem escrever sem erros!)
Configura este modelo no teu servidor:
# Cria o grupo partilhado e adiciona os utilizadores
groupadd -f grupoweb
usermod -aG grupoweb deployer
usermod -aG grupoweb www-data
# Ajusta a posse e ativa o bit setgid (2775)
chown -R deployer:grupoweb /var/www/meu-site/uploads
chmod 2775 /var/www/meu-site/uploads
Permissões Granulares com POSIX ACLs (setfacl)
Quando precisas de dar permissão de escrita a dois utilizadores diferentes (por exemplo, ao www-data e a um utilizador de backup como o borgbackup) sem abrir a pasta ao mundo, as permissões tradicionais de Linux tornam-se limitadas.
As Listas de Controlo de Acesso (POSIX ACLs) resolvem isto com facilidade:
# Instala o suporte a ACLs no teu Debian
apt-get install -y acl
# Dá permissão explícita de leitura, escrita e execução ao www-data
setfacl -m u:www-data:rwx /var/www/meu-site/uploads
# Garante que todos os futuros ficheiros criados também herdam a regra
setfacl -d -m u:www-data:rwx /var/www/meu-site/uploads
# Consulta as regras ativas na pasta
getfacl /var/www/meu-site/uploads
Seguindo as boas práticas da OWASP e exemplos abertos disponíveis no GitHub, ganhas controlo cirúrgico sobre os teus ficheiros sem nunca colocar o servidor em risco.
Aliando esta gestão rigorosa aos nossos serviços de alojamento gerido e contratos estruturados de manutenção preventiva, a tua empresa garante que os seus nós Linux operam com máxima estabilidade, segurança e organização técnica.
Na prática, aplicas exatamente estes padrões operacionais em setores exigentes como especialistas em devops e arquitetura cloud e provedores de cloud computing e iaas. Quando alinhas a tua estrutura através de consultoria técnica antes de construir e manutenção de website e cuidado técnico, transformas boas práticas técnicas numa vantagem competitiva real e mensurável para o teu negócio.
[+] [ INDEX_DIRECTORY ] 13 tópicos ▼
- O Comando do Desespero: Porque Muitos Programadores Usam chmod 777
- Onde Devem Viver os Teus Ficheiros: A Estrutura de Pastas do Linux (FHS)
- O Funcionamento das Permissões no Linux: Modo Octal e Tríades
- Trabalho em Equipa sem Erros: O Poder do setgid (chmod g+s)
- Permissões Granulares com POSIX ACLs (setfacl)
- Autor
- Perguntas Frequentes
- Porque é que correr 'chmod -R 777' numa pasta web destrói a segurança do servidor?
- O que faz exatamente o bit setgid (chmod g+s) numa pasta partilhada?
- Qual é a vantagem das ACLs do POSIX (setfacl) face às permissões normais do Linux?
- O que é o FHS e onde devem viver as aplicações web num servidor Linux?
- Nós Relacionados
- Sequência do Caminho
Perguntas Frequentes
Porque é que correr 'chmod -R 777' numa pasta web destrói a segurança do servidor?
O modo 777 dá permissão de ler, escrever e executar a toda a gente (Other). Qualquer processo não privilegiado comprometido ou script malicioso pode alterar código-fonte e injetar malware.
O que faz exatamente o bit setgid (chmod g+s) numa pasta partilhada?
Quando ativas o setgid numa pasta, todos os novos ficheiros e subpastas criados dentro dela herdam automaticamente o grupo da pasta-mãe, resolvendo conflitos entre utilizadores e o servidor web.
Qual é a vantagem das ACLs do POSIX (setfacl) face às permissões normais do Linux?
As permissões normais só permitem definir um Dono e um Grupo. Com ACLs (setfacl), podes atribuir permissões de escrita a múltiplos utilizadores e grupos diferentes no mesmo ficheiro.
O que é o FHS e onde devem viver as aplicações web num servidor Linux?
O FHS (Filesystem Hierarchy Standard) organiza as pastas do Linux. Aplicações web devem viver em /var/www (sites normais) ou /opt (containers e aplicações autónomas), nunca em /root ou /tmp.
[ RELATED_NODES ]
> INICIAR_PROJETO
Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.