Permissões de Arquivos no Linux Explicadas
Todo sistema Linux usa permissões de arquivos para controlar quem pode ler, escrever ou executar um arquivo. Configure-as incorretamente e você bloqueará usuários legítimos ou deixará arquivos sensíveis expostos. Este guia explica como funcionam a propriedade e as permissões de arquivos no Linux, como ler a string de permissões e como alterar permissões usando chmod e chown.
Pontos-Chave
- Todo arquivo possui um proprietário, um grupo e um conjunto de permissões para três classes: proprietário, grupo e outros.
- Os triplets de permissões usam
r(read/leitura),w(write/escrita) ex(execute/execução) — e se comportam de forma diferente em arquivos versus diretórios. - Use
chmodpara alterar permissões (modo simbólico ou octal) echownpara alterar a propriedade. - O valor
umaskcontrola as permissões padrão para arquivos e diretórios recém-criados. - Bits especiais (setuid, setgid, sticky) e ACLs POSIX lidam com casos que o modelo padrão não consegue.
Como São Estruturadas a Propriedade e as Permissões de Arquivos no Linux
Cada arquivo e diretório no Linux recebe:
- Um proprietário (uma conta de usuário)
- Um grupo (um conjunto de usuários)
- Um conjunto de permissões para três classes: proprietário, grupo e outros
Quando um processo tenta acessar um arquivo, o kernel verifica essas classes em ordem — primeiro o proprietário, depois o grupo, depois outros — e para na primeira correspondência. As classes são mutuamente exclusivas: se você é o proprietário, apenas os bits do proprietário se aplicam, mesmo que os bits do grupo sejam mais permissivos.
Como Ler as Permissões rwx no Linux
Execute ls -l para visualizar as permissões:
$ ls -l
-rw-r--r-- 1 alice developers 4017 Jun 1 10:00 config.conf
drwxr-x--- 2 alice developers 68 Jun 1 10:00 project/
O primeiro caractere é o tipo de arquivo (- para arquivo regular, d para diretório, l para symlink). Os próximos nove caracteres são três triplets de permissões:
rw- r-- r--
↑ ↑ ↑
proprietário grupo outros
Cada triplet usa três bits: r (read/leitura), w (write/escrita), x (execute/execução). Um - significa que aquela permissão não está definida.
Nota: Se você vir um
+no final da string de permissões (por exemplo,-rw-r--r--+), o arquivo possui uma ACL POSIX aplicada. Ols -lpadrão não mostrará essas regras extras — usegetfaclpara inspecioná-las.
O Que Cada Bit de Permissão Realmente Faz
Em arquivos:
| Bit | Efeito |
|---|---|
r | Ler o conteúdo do arquivo (cat, cp) |
w | Modificar ou sobrescrever o arquivo |
x | Executar o arquivo como programa ou script |
Em diretórios:
| Bit | Efeito |
|---|---|
r | Listar entradas do diretório (nomes de arquivos) |
w | Criar, renomear ou excluir arquivos dentro |
x | Atravessar o diretório (cd, abrir arquivos por path) |
O bit de execução em diretórios é frequentemente mal compreendido. Sem ele, você não pode usar cd para entrar no diretório ou acessar qualquer arquivo dentro dele por path — mesmo que você tenha permissão de leitura.
Como Alterar Permissões de Arquivos no Linux com chmod
chmod aceita tanto modos simbólicos quanto numéricos (octais).
Modo simbólico:
chmod u+x script.sh # adiciona execução para o proprietário
chmod go-w config.conf # remove escrita do grupo e outros
chmod u=rwx,g=rx,o= app/ # define permissões exatas para todas as classes
chmod -R u=rwX,g=rX,o=rX /var/www/html # recursivo: X maiúsculo define execução em diretórios e arquivos que já possuem execução
Modo numérico (octal) — cada dígito soma r=4, w=2, x=1:
chmod 644 config.conf # proprietário rw, grupo r, outros r
chmod 750 script.sh # proprietário rwx, grupo rx, outros nenhum
chmod 700 ~/.ssh # apenas proprietário — correto para diretórios SSH
Discover how at OpenReplay.com.
Como Alterar a Propriedade de Arquivos com chown
chown altera o proprietário, o grupo ou ambos:
chown alice config.conf # altera apenas o proprietário
chown alice:developers config.conf # altera proprietário e grupo
chown -R www-data:www-data /var/www # alteração recursiva de propriedade
Como as Permissões Padrão São Definidas com umask
Arquivos novos não começam com permissões abertas. O valor umask mascara bits do padrão do sistema (tipicamente 666 para arquivos, 777 para diretórios). Um umask de 022 produz arquivos 644 e diretórios 755 — o padrão mais comum em servidores Linux.
Se o diretório pai tiver uma ACL padrão configurada, essas regras de ACL são herdadas em vez de depender puramente do umask.
umask # visualiza o umask atual
umask 027 # define padrão mais restritivo: arquivos 640, diretórios 750
Bits de Permissão Especiais: setuid, setgid e Sticky Bit
Estes estendem o modelo padrão para casos de uso específicos:
- setuid (4xxx): Um executável roda com os privilégios do proprietário do arquivo. Usado por binários do sistema como
/usr/bin/passwd. Perigoso em scripts personalizados — evite-o. - setgid (2xxx) em um diretório: Novos arquivos herdam o grupo do diretório em vez do grupo primário do criador. Útil para diretórios de projetos compartilhados.
- Sticky bit (1xxx) em um diretório: Apenas o proprietário do arquivo, proprietário do diretório ou root podem excluir arquivos dentro. Padrão em
/tmp.
chmod 2775 /shared/project # setgid em diretório compartilhado
chmod 1777 /tmp # sticky bit — já definido por padrão
Além das Permissões Clássicas: ACLs e Módulos de Segurança
As permissões rwx padrão cobrem a maioria dos casos de uso, mas têm limites. Se você precisar conceder acesso a um usuário específico sem alterar a associação de grupo, use ACLs POSIX via setfacl e getfacl. Em sistemas executando SELinux ou AppArmor, as políticas do módulo de segurança se aplicam além das permissões padrão — um arquivo pode ser legível por todos na camada UNIX, mas ainda assim bloqueado por uma política SELinux.
Referência Rápida: Padrões Comuns de Permissões
| Modo | Simbólico | Uso Típico |
|---|---|---|
644 | rw-r--r-- | Arquivos de configuração de servidor web, conteúdo público |
755 | rwxr-xr-x | Diretórios, scripts executáveis |
700 | rwx------ | Diretórios home, diretório de chaves SSH |
600 | rw------- | Arquivos de chave privada (~/.ssh/id_rsa) |
2775 | rwxrwsr-x | Diretórios de grupo compartilhados |
1777 | rwxrwxrwt | Diretórios graváveis por todos como /tmp |
Conclusão
As permissões de arquivos no Linux seguem um modelo consistente e previsível. Uma vez que você entenda a estrutura proprietário/grupo/outros, os bits rwx e como chmod e chown os aplicam, você terá a base para proteger qualquer arquivo ou diretório corretamente. Para casos em que o modelo de três classes não é granular o suficiente, recorra às ACLs — e sempre mantenha o princípio do menor privilégio em mente.
Perguntas Frequentes
Definir 777 concede permissões de leitura, escrita e execução para todos os usuários do sistema. Embora remova todas as barreiras de acesso, também significa que qualquer usuário ou processo comprometido pode modificar ou excluir o arquivo. Sempre atribua as permissões mínimas necessárias para que um arquivo funcione corretamente.
chmod altera quais ações (leitura, escrita, execução) são permitidas em um arquivo. chown altera quem possui o arquivo e a qual grupo ele pertence. Você normalmente usa chown para atribuir o proprietário e grupo corretos primeiro, depois chmod para definir os bits de permissão apropriados para cada classe.
Listar requer o bit de leitura (r), mas entrar em um diretório requer o bit de execução (x). Se um diretório tem r mas não x, você pode ver os nomes dos arquivos com ls mas não pode usar cd nele ou abrir qualquer arquivo dentro por path. Adicione o bit de execução com chmod para corrigir isso.
Use chmod com X maiúsculo em vez de x minúsculo. A flag X maiúscula define execução apenas em diretórios e arquivos que já possuem pelo menos um bit de execução definido. Por exemplo, chmod -R u=rwX,g=rX,o=rX /path aplica execução a diretórios enquanto deixa arquivos regulares não-executáveis.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.