Permissões de Arquivos no Linux Explicadas
Permissões de arquivos no Linux, ownership, chmod, chown, umask e bits especiais como setuid e sticky bit explicados para proteger qualquer sistema Linux.
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
Por que chmod 777 funciona mas é considerado má prática?
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.
Qual é a diferença entre chmod e chown?
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.
Por que não consigo usar cd em um diretório mesmo podendo listar seu conteúdo?
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.
Como aplico permissões recursivamente sem tornar todos os arquivos executáveis?
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.
Star on GitHub12k