Num sistema Linux, cada ficheiro e cada diretório transporta consigo um conjunto de bits que decide quem o pode ler, alterar ou executar. Quando um script recusa correr, quando o SSH rejeita uma chave privada ou quando um ficheiro de configuração aparece aberto a toda a gente, a resposta passa quase sempre pelo mesmo comando: o chmod. Dominá-lo não é um detalhe de administração — é uma competência de base para qualquer profissional de sistemas ou de cibersegurança.
Neste artigo explicamos como funcionam os doze bits de permissão, as duas formas de os escrever (octal e simbólica), as opções que realmente interessam no dia a dia e os usos concretos em segurança ofensiva e defensiva. No final, pode praticar tudo num simulador interativo sem risco de estragar nada.
O que faz o chmod
O chmod (change mode) altera o modo de um ficheiro ou diretório, isto é, os bits de permissão registados no sistema de ficheiros. As permissões dividem-se em três classes — dono (u), grupo (g) e outros (o) — e, para cada classe, três direitos: leitura (r), escrita (w) e execução (x). A estes nove bits somam-se três bits especiais: setuid, setgid e sticky, que veremos adiante.
chmod [OPÇÕES] MODO FICHEIRO...
chmod [OPÇÕES] --reference=FICH_REF FICHEIRO...
Um pormenor que confunde muita gente: nos diretórios, os mesmos bits têm um significado diferente. O r permite listar o conteúdo, o w permite criar e apagar entradas, e o x permite entrar no diretório e aceder aos ficheiros lá dentro. Um diretório com r mas sem x é praticamente inútil. Outro detalhe importante: o chmod nunca altera as permissões de uma ligação simbólica em si — atua sempre sobre o ficheiro apontado.
As opções que interessam
Modo octal: os números que tem de saber de cor
No modo octal, cada classe recebe um dígito que resulta da soma dos direitos: r vale 4, w vale 2 e x vale 1. Assim, 7 é tudo (4+2+1), 6 é ler e escrever, 5 é ler e executar. O modo octal define os nove bits de uma só vez — o que lá estava antes é substituído por completo.
chmod 644 relatorio.txt # dono lê/escreve; grupo e outros só leem
chmod 755 script.sh # dono tudo; os restantes leem e executam
chmod 600 chave.pem # só o dono — o mínimo exigido pelo SSH
chmod 700 ~/privado # diretório acessível apenas ao dono
- 644 — a predefinição sensata para ficheiros de dados.
- 755 — a predefinição para scripts, executáveis e diretórios.
- 600 / 700 — material sensível: chaves, credenciais, diretórios privados.
- 777 — toda a gente pode tudo. Quase nunca é a resposta certa; é o que os auditores procuram.
Um quarto dígito à esquerda ativa os bits especiais: 4 para setuid, 2 para setgid e 1 para o sticky bit.
chmod 4755 programa # setuid: corre com os privilégios do dono
chmod 2775 /srv/dados # setgid: o conteúdo criado herda o grupo do diretório
chmod 1777 /partilha # sticky: todos escrevem, só o dono apaga (o modo do /tmp)
Modo simbólico: alterações cirúrgicas
O modo simbólico combina uma classe (u, g, o ou a para todas), um operador (+ acrescenta, - retira, = define em absoluto) e os direitos a aplicar. A grande vantagem: mexe apenas nos bits indicados, deixando o resto intacto.
chmod +x instalar.sh # execução para todas as classes
chmod u+x instalar.sh # execução apenas para o dono
chmod go-rwx segredo.txt # retira tudo a grupo e outros
chmod o-w config.php # correção mínima de um ficheiro a 666
chmod a=r aviso.txt # fica SÓ leitura para todos — o = apaga o resto
chmod u=rw,go= chave.pem # equivalente ao 600, em duas cláusulas
Vale a pena conhecer três símbolos menos óbvios. O X maiúsculo aplica execução apenas a diretórios e a ficheiros que já eram executáveis — indispensável em operações recursivas, porque evita tornar executáveis ficheiros de dados. O s liga o setuid (u+s) ou o setgid (g+s), e o t liga o sticky bit (+t). Também é possível copiar as permissões de uma classe para outra, por exemplo g=u.
Opções da linha de comandos
-R— aplica a alteração recursivamente a todo o conteúdo de um diretório. Poderoso e perigoso na mesma medida.-v— relata cada ficheiro processado, tenha mudado ou não.-c— relata apenas os ficheiros cujas permissões mudaram de facto; em geral mais útil do que o-v.-f— suprime as mensagens de erro.--reference=FICH— copia as permissões de outro ficheiro em vez de indicar um modo.--preserve-root— recusa-se a operar recursivamente sobre a raiz/, uma rede de segurança contra erros catastróficos.
$ chmod -c 755 scan.sh
mode of 'scan.sh' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
chmod em cibersegurança
Proteção de chaves e credenciais. O cliente SSH recusa chaves privadas com permissões demasiado abertas — e com razão: uma chave legível por outros utilizadores do sistema equivale a uma credencial comprometida. chmod 600 ~/.ssh/id_ed25519 e chmod 700 ~/.ssh são reflexos que qualquer administrador deve ter.
Caça a binários setuid em escaladas de privilégios. Num teste de intrusão, depois do acesso inicial, uma das primeiras verificações é procurar binários setuid pertencentes ao root: find / -perm -4000 -type f 2>/dev/null. Um binário setuid mal escolhido — ou colocado por um atacante como mecanismo de persistência — é um caminho direto para privilégios de root. Na defesa, o inventário regular destes binários e a remoção do bit com chmod u-s onde ele não é necessário fazem parte de qualquer processo de hardening.
Hardening de servidores web. Ficheiros de configuração com credenciais de base de dados a 666 ou 777 são um achado recorrente em auditorias. A regra prática: conteúdo estático a 644, diretórios a 755, ficheiros com segredos a 640 ou 600 com o grupo do servidor web — e nunca, em circunstância alguma, chmod -R 777 para «resolver» um problema de acesso.
Diretórios partilhados seguros. O sticky bit (chmod 1777) impede que utilizadores apaguem ficheiros uns dos outros em diretórios de escrita comum, como o /tmp. O setgid em diretórios de equipa (chmod 2775) garante que tudo o que lá for criado herda o grupo correto, evitando fugas de acesso por ficheiros criados com o grupo errado.
Experimente no simulador interativo
A simulação abaixo mostra uma pasta de laboratório com casos típicos — um script sem execução, uma chave privada demasiado aberta, um ficheiro a 666, diretórios privados e de partilha. Escolha um alvo e um modo (octal ou simbólico) e observe na grelha exatamente que bits mudam, com o antes e o depois em octal e em notação simbólica. As alterações acumulam-se de comando para comando, como numa sessão real; o botão «Repor permissões» devolve tudo ao estado inicial e «Demonstrar tudo» percorre automaticamente os casos mais instrutivos, do 755 clássico ao perigo do -R sem X.
Erros comuns e boas práticas
- chmod -R 777 como «solução» universal — resolve o sintoma e cria uma vulnerabilidade. Identifique primeiro que utilizador precisa de que acesso e atribua o mínimo necessário.
- Usar
xminúsculo em recursivos —chmod -R 755torna executáveis todos os ficheiros de dados. Prefirachmod -R u=rwX,go=rX: oXmaiúsculo só afeta diretórios e o que já era executável. - Esquecer que diretórios precisam de
x— sem o bit de execução, ninguém entra no diretório, mesmo com leitura ativa. - Confundir
=com+— o=define em absoluto e apaga os bits não mencionados.chmod a=rremove escrita e execução a todas as classes. - Atribuir setuid sem necessidade — cada binário setuid é superfície de ataque. Documente os que existem e justifique cada um.
- Trabalhar às cegas — use
-cpara ver o que mudou de facto e confirme sempre comls -loustatno final.
Conclusão
O chmod é pequeno na sintaxe e enorme nas consequências: os mesmos doze bits que fazem um script arrancar podem abrir a porta a uma escalada de privilégios. Saber ler rwxr-xr-x de relance, escolher entre octal e simbólico conforme a situação e respeitar o princípio do menor privilégio são hábitos que distinguem uma administração profissional. Se a gestão de utilizadores também faz parte do seu dia a dia, complemente esta leitura com o nosso artigo sobre o useradd.
Quer levar estas competências mais longe, na sua equipa ou na sua organização? A HJFR desenha formação prática em Linux e cibersegurança e presta consultoria de hardening adaptada ao seu ambiente — conheça o nosso catálogo de serviços.
Este artigo faz parte da série «Comandos Linux, um a um» do blog HJFR — fique atento aos próximos comandos.
