Back

Permissões de Arquivos no Linux Explicadas

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) e x (execute/execução) — e se comportam de forma diferente em arquivos versus diretórios.
  • Use chmod para alterar permissões (modo simbólico ou octal) e chown para alterar a propriedade.
  • O valor umask controla 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. O ls -l padrão não mostrará essas regras extras — use getfacl para inspecioná-las.

O Que Cada Bit de Permissão Realmente Faz

Em arquivos:

BitEfeito
rLer o conteúdo do arquivo (cat, cp)
wModificar ou sobrescrever o arquivo
xExecutar o arquivo como programa ou script

Em diretórios:

BitEfeito
rListar entradas do diretório (nomes de arquivos)
wCriar, renomear ou excluir arquivos dentro
xAtravessar 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

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

ModoSimbólicoUso Típico
644rw-r--r--Arquivos de configuração de servidor web, conteúdo público
755rwxr-xr-xDiretórios, scripts executáveis
700rwx------Diretórios home, diretório de chaves SSH
600rw-------Arquivos de chave privada (~/.ssh/id_rsa)
2775rwxrwsr-xDiretórios de grupo compartilhados
1777rwxrwxrwtDiretó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.

OpenReplay