Permissões no Linux (chmod, chown, setgid) e Estrutura de Pastas Explicadas para Equipas Web

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:

  1. Dono (User - u): A conta de utilizador que criou o ficheiro.
  2. Grupo (Group - g): O grupo de utilizadores atribuído ao ficheiro.
  3. 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

  1. Cria um Grupo Partilhado: grupoweb
  • Adiciona o ‘deployer’ e o ‘www-data’ ao ‘grupoweb’
  1. Altera o Grupo da Pasta chown -R deployer: grupoweb /var/www/meu-site/uploads
  2. 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 ▼
[ SYSTEM.FAQ ]

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.

> 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.