Skip to content
Voltar ao blog
Segurança

Permissões de arquivos no Linux: chmod 755, 644 e 777

Entenda as permissões de arquivos no Linux: como funcionam chmod, octal (755, 644, 777) e rwx, além de setuid e umask, com uma calculadora chmod grátis.

11 min de leitura

Permissões de arquivos no Linux: chmod 755, 644 e 777

As permissões de arquivos no Linux decidem quem pode ler, escrever ou executar cada arquivo e pasta do sistema. Cada item tem três classes de usuário (o dono, um grupo e todos os demais), e cada classe recebe três bits de permissão: leitura (r), escrita (w) e execução (x). São nove bits por arquivo. O chmod os define, e a notação abreviada que você vê em todo lugar é a octal: o rwx de cada classe se condensa em um único dígito de 0 a 7 (leitura 4 + escrita 2 + execução 1).

Três modos cobrem quase tudo que você vai digitar algum dia:

  • 755 (rwxr-xr-x) — diretórios e scripts: o dono pode alterá-los, e todos os demais podem lê-los e executá-los.
  • 644 (rw-r--r--) — arquivos comuns: o dono escreve, todos os demais leem.
  • 777 (rwxrwxrwx) — acesso total para todo mundo. Quase sempre errado; é uma brecha de segurança, não uma solução.

Ative qualquer combinação na calculadora chmod gratuita e veja o octal, a string rwx e o comando exato serem atualizados juntos. O restante deste guia explica como esses números funcionam e onde cada um se encaixa.

Permissões de arquivos no Linux em 30 segundos

OctalSimbólicoUso típico
400r--------Chave privada SSH, somente leitura
600rw-------Arquivos privados, chaves SSH, .env
644rw-r--r--Páginas web, config, a maioria dos arquivos
700rwx------Diretórios privados (~/.ssh)
755rwxr-xr-xScripts, binários, diretórios web
775rwxrwxr-xDiretórios compartilhados por grupo
777rwxrwxrwxTodos, tudo — evite
1777rwxrwxrwtDiretórios temporários compartilhados como /tmp

Regra prática: 644 para arquivos, 755 para diretórios, e aperte a partir daí. Afrouxe um modo apenas quando algo concreto quebrar, nunca preventivamente.

O modelo de permissões: dono, grupo, outros

Três classes compartilham um arquivo. O dono (normalmente quem o criou), um único grupo e os outros, ou seja, toda conta que não é o dono nem membro do grupo. Cada classe recebe independentemente leitura, escrita e execução:

  • leitura (r) — ver o conteúdo de um arquivo, ou listar as entradas de um diretório.
  • escrita (w) — alterar um arquivo, ou adicionar e remover entradas em um diretório.
  • execução (x) — rodar um arquivo como programa, ou entrar (cd) em um diretório.

A pegadinha que confunde as pessoas: em um diretório, os bits significam algo diferente. O r permite listar nomes, o w permite criar e apagar entradas dentro dele, e o x permite atravessá-lo, alcançando os arquivos abaixo para que você possa entrar com cd. Você pode ter r sem x em um diretório, rodar ls nele e mesmo assim receber “Permission denied” no instante em que tentar entrar. É exatamente por isso que diretórios usam 755, não 644.

Lendo uma linha do ls -l

Rode ls -l e cada entrada começa com um bloco de dez caracteres:

$ ls -l
-rw-r--r--  1 jack staff  1400 Jul 17 10:00 index.html
drwxr-xr-x  5 jack staff   160 Jul 17 10:00 assets

Leia da esquerda para a direita. O primeiro caractere é o tipo de arquivo, não uma permissão: - é um arquivo comum, d um diretório, l um link simbólico, c ou b um dispositivo, p um pipe nomeado, s um socket. Os nove caracteres seguintes são três grupos de rwx: dono, grupo, outros. Então -rw-r--r-- é um arquivo comum onde o dono lê e escreve (rw-) enquanto grupo e outros só leem (r-- r--), o que é 644. drwxr-xr-x é um diretório em 755.

Alguns sistemas acrescentam um marcador após os nove bits. Um . ao final sinaliza um contexto do SELinux, um + significa que uma ACL adiciona regras além dos bits básicos, e no macOS um @ marca atributos estendidos. Nenhum deles altera o octal. Ignore o marcador e leia os nove caracteres.

Notação octal: como 755 vira rwxr-xr-x

As permissões de arquivo em octal funcionam porque cada permissão é uma potência de dois:

  • leitura = 4
  • escrita = 2
  • execução = 1

Some os bits que uma classe possui e você obtém o dígito dela. rwx é 4 + 2 + 1 = 7. r-x é 4 + 1 = 5. r-- é 4. Então rwxr-xr-x, em grupos de três, se lê como 7 5 5. Faça o mesmo com rw-r--r-- e você obtém 4 + 2, 4, 4 → 644. É esse o truque inteiro; não há nada mais nas permissões octais além de três somas independentes.

Os dígitos de permissão 0–7 num relance

DígitoBinárioPermissões
0000Nenhuma permissão
1001Somente execução
2010Somente escrita
3011Escrita + execução
4100Somente leitura
5101Leitura + execução
6110Leitura + escrita
7111Leitura + escrita + execução

O octal é simplesmente base 8, então cada dígito empacota três bits sem invadir a classe seguinte. Se a aritmética posicional estiver enferrujada, o conversor de base numérica mostra como a base 8 se mapeia para o binário do mesmo jeito que cada dígito de permissão faz.

chmod 755 vs 644 vs 777: os modos que você realmente vai digitar

A comparação direta entre chmod 755, 644 e 777:

OctalSimbólicoDonoGrupoOutrosUso típicoRisco
644rw-r--r--leitura/escritaleituraleituraArquivos comunsPadrão seguro
755rwxr-xr-xtudoleitura/execleitura/execDiretórios, scriptsPadrão seguro
600rw-------leitura/escritaArquivos privados, chavesMuito seguro
700rwx------tudoDiretórios privadosMuito seguro
775rwxrwxr-xtudotudoleitura/execDiretórios compartilhados por grupoGrupo pode escrever
777rwxrwxrwxtudotudotudo(evite)Gravável por todos

A diferença entre 755 e 644 é um único bit: execução. Diretórios, scripts e binários precisam do x para serem acessados ou executados, então ficam em 755. Um arquivo comum, como uma página HTML, uma imagem ou uma config, não tem motivo para ser executável, então permanece em 644. Confundir os dois está por trás da maioria dos erros de permissão do dia a dia.

Por que 777 é perigoso. Ele entrega acesso de escrita a toda conta da máquina, incluindo uma conta de serviço comprometida ou um processo web sequestrado. Uma raiz de documentos gravável por todos é o caminho clássico para um site desfigurado ou malware injetado, porque qualquer um que a alcance pode sobrescrever seu código. Quando um post de fórum manda você dar chmod 777 em algo “para funcionar”, o problema quase sempre é de propriedade, tratado adiante.

A exceção 1777. O /tmp é gravável por todos de propósito, mas com uma proteção. O modo 1777 adiciona o sticky bit, que deixa qualquer um criar arquivos ao mesmo tempo que impede usuários de apagar ou renomear arquivos que não são deles. É por isso que diretórios temporários compartilhados são seguros em 1777, mas nunca em 777 puro. Digite 777 na calculadora chmod e o painel de risco o sinaliza na hora, enquanto 1777 é reconhecido como o padrão para diretórios compartilhados.

Modo numérico vs simbólico

O chmod aceita os mesmos bits de duas formas.

O modo numérico (absoluto) declara o resultado completo. chmod 755 file define todos os nove bits como rwxr-xr-x independentemente do que havia antes. É isso que você quer em scripts e deploy, onde está impondo um estado sabidamente correto.

O modo simbólico (relativo) descreve uma mudança. chmod u+x file inverte um bit (adiciona execução para o dono) e deixa todo o resto intacto. chmod u=rwx,go=rx file define classes inteiras de forma explícita. O modo simbólico serve para ajustes pontuais em que reafirmar o modo inteiro seria exagero.

# Numérico: sobrescreve o modo inteiro
$ chmod 644 report.txt

# Simbólico: altera só o que você nomear
$ chmod u+x deploy.sh        # adiciona execução para o dono
$ chmod go-w shared.conf     # remove escrita de grupo e outros
$ chmod u=rw,go=r notes.md   # define cada classe explicitamente → 644

Uma armadilha do modo simbólico: chmod +x sem uma classe é filtrado pela sua umask. Com a umask comum 022, chmod +x script.sh adiciona execução para todos, então equivale a chmod a+x. Sob uma umask mais restrita como 077, ele só afeta o dono. Quando você quer um resultado garantido, nomeie a classe: u+x para o dono sozinho, a+x para todos.

Permissões especiais: setuid, setgid e o sticky bit

Além dos nove bits padrão, um quarto dígito octal, à frente, carrega três modos especiais, o trio setuid, setgid e sticky bit:

  • setuid = 4000 — o programa roda com os privilégios do dono do arquivo, não os de quem o chamou. É assim que o passwd, de propriedade do root, permite que um usuário comum atualize um banco de senhas pertencente ao root.
  • setgid = 2000 — a mesma ideia para o grupo. Em um diretório, ele também faz os novos arquivos herdarem o grupo do diretório, o que mantém um projeto compartilhado consistentemente sob o mesmo grupo.
  • sticky bit = 1000 — em um diretório compartilhado, restringe a exclusão para que usuários só possam remover os próprios arquivos. O /tmp em 1777 é o exemplo canônico.
$ chmod 4755 /usr/local/bin/mytool   # setuid
$ chmod 2775 /srv/shared             # setgid em um diretório compartilhado
$ chmod 1777 /tmp                     # sticky bit
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Jul 17 10:00 /usr/bin/passwd

A regra de maiúscula/minúscula de s/S e t/T

No ls -l, os bits especiais reaproveitam a posição de execução, e a caixa (maiúscula ou minúscula) indica se a execução também está ativa. O s minúsculo (setuid/setgid) ou t (sticky) significa que o bit especial e a execução estão ligados, o caso normal. O S ou T maiúsculo significa que o bit especial está ativo, mas a execução não, o que costuma ser um erro, porque um bit especial em um arquivo não executável não faz nada de útil.

Compare rwsr-xr-x (4755, setuid com execução, correto) com rwSr--r-- (4644, setuid sem execução, suspeito). Sempre que você vir um S ou T maiúsculo, verifique se alguém deixou cair o bit de execução por acidente.

A pegadinha de diretórios do GNU que ninguém menciona

A diferença de plataforma que quase todo tutorial erra: no Linux (GNU coreutils), um chmod 755 dir numérico não limpa um bit setuid ou setgid já existente naquele diretório. Ele o preserva. Se um diretório já está em 2755 (setgid) e você roda chmod 755 esperando começar do zero, o bit setgid permanece, e o diretório na verdade continua em 2755.

Para realmente limpá-lo, seja explícito:

$ chmod 00755 dir      # a forma de cinco dígitos zera o dígito especial
$ chmod =755 dir       # o = limpa todo bit não listado
$ chmod u-s,g-s dir    # remove setuid e setgid pelo nome

BSD e macOS fazem o oposto: um chmod 755 numérico limpa os bits especiais por padrão. Então um script de deploy que “reseta” permissões com chmod -R 755 se comporta de forma diferente em um laptop Mac e em um servidor Linux. Essa retenção está documentada no manual do GNU coreutils; na dúvida, use a forma de cinco dígitos ou u-s,g-s para que o resultado seja idêntico em todo lugar.

umask: o que os arquivos recém-criados recebem

Você raramente dá chmod em cada arquivo à mão; a maioria recebe seu modo na criação, e a umask o decide. Uma umask é um conjunto de bits para desligar. Arquivos novos partem da base 666 e diretórios novos de 777, e a umask retira bits com máscara:

effective mode = base & ~umask

Arquivos começam em 666, não 777, porque um arquivo recém-criado não tem por que ser executável por padrão. Você adiciona esse bit de propósito com chmod +x.

umaskArquivos novosDiretórios novosSignificado
022644755Padrão — outros leem, não escrevem
077600700Privado ao dono
002664775Colaboração em grupo

Faça a conta do padrão 022 na mão: 666 & ~022 = 666 & 755 = 644, e 777 & ~022 = 755. Verifique seu valor atual com umask, e defina um padrão de sessão com, digamos, umask 077 numa máquina onde nada deveria ser legível por grupo ou por todos.

chmod vs chown: permissões vs propriedade

chmod e chown respondem a perguntas diferentes. O chmod altera o que o dono, o grupo e os outros podem fazer: os bits de permissão. O chown altera quem o dono e o grupo de fato são. Recorrer ao 777 costuma ser um problema de propriedade fantasiado de problema de permissão.

O caso clássico: um servidor web rodando como www-data não consegue escrever no seu diretório de uploads. O chmod 777 faz o erro sumir ao deixar o mundo inteiro escrever, e deixa uma brecha para trás. A correção certa atribui a propriedade ao processo que precisa dela:

# Errado: abre o diretório para toda conta da máquina
$ sudo chmod -R 777 /var/www/uploads

# Certo: entregue ao usuário web, mantenha um modo restrito
$ sudo chown -R www-data:www-data /var/www/uploads
$ sudo find /var/www/uploads -type d -exec chmod 755 {} +
$ sudo find /var/www/uploads -type f -exec chmod 644 {} +

Ordem de diagnóstico quando algo está inesperadamente ilegível: rode ls -l para ver quem é o dono primeiro, decodifique o modo em segundo, e então decida se a correção é chown, chmod ou adicionar um usuário a um grupo.

Permissões recursivas feitas do jeito certo

Um chmod -R 755 . genérico marca todo arquivo comum como executável, o que é ruído na melhor das hipóteses e um risco silencioso na pior. Em vez disso, recorra por tipo:

$ find . -type d -exec chmod 755 {} +   # diretórios → 755
$ find . -type f -exec chmod 644 {} +   # arquivos → 644

O chmod do GNU tem um atalho de uma linha com o X maiúsculo, que adiciona execução apenas a diretórios e a arquivos que carregam um bit de execução:

$ chmod -R u+rwX,go+rX .

A calculadora chmod gera os comandos find só-para-diretórios e só-para-arquivos para qualquer modo que você escolher, então você pode copiar a divisão correta em vez de recorrer a um -R puro.

Boas práticas de permissões de arquivos no Linux

  • Conceda o menor privilégio que funcione. Comece pelo modo mais restrito e abra apenas o que quebrar. Cada bit de escrita a mais é superfície de ataque.
  • Use por padrão arquivos 644 dentro de diretórios 755. Essa combinação serve a quase toda raiz web e checkout de repositório. Arquivos comuns raramente precisam de execução; diretórios sempre precisam.
  • Nunca deixe 777 em nada que um servidor possa alcançar. Se várias contas precisam escrever, use um grupo compartilhado com 775 ou 2775 (o setgid mantém a propriedade de grupo consistente) em vez de abrir o modo para o mundo.
  • Mantenha chaves privadas SSH em 600, ou 400 quando finalizadas. O OpenSSH recusa terminantemente chaves privadas legíveis por grupo ou por todos. Veja o manual do OpenSSH para o requisito exato do arquivo de chave. Chaves públicas e authorized_keys ficam bem em 644.
  • Combine os modos de arquivo com outros controles. As permissões são a base; junte-as à autenticação básica do gerador htpasswd quando uma pasta precisar de login, e trate os modos de arquivo como uma peça do quadro coberto no nosso guia de segurança web essencial.

FAQ

O que o d ou l no início de drwxr-xr-x significa?

O primeiro caractere de uma linha do ls -l é o tipo de arquivo, não uma permissão. d marca um diretório, l um link simbólico, - um arquivo comum, c ou b um dispositivo, p um pipe nomeado, e s um socket. Só os nove caracteres depois dele codificam os bits reais de leitura, escrita e execução.

Qual é a diferença entre um s minúsculo e um S maiúsculo nas permissões?

Tanto um s minúsculo quanto um S maiúsculo significam que o bit setuid ou setgid está ativo. O s minúsculo significa que a execução também está ativa, o caso normal de funcionamento. O S maiúsculo significa que o bit especial está ligado, mas a execução está desligada (como em 4644), o que é quase sempre uma configuração errada, já que um bit especial não tem sentido sem execução.

O que é a umask e como ela decide as permissões padrão?

A umask é o conjunto de bits de permissão desligados quando um arquivo é criado. Arquivos novos começam na base 666 e diretórios em 777, então effective = base & ~umask remove os bits mascarados. O padrão 022 resulta em arquivos 644 e diretórios 755; rode umask para ver o seu, ou umask 077 para um padrão mais privado.

Quando devo usar 400 ou 700 em vez de 644 ou 755?

Use 400 ou 700 quando um arquivo ou diretório precisa permanecer totalmente privado. 400 (r--------) é um arquivo privado somente leitura, ideal para uma chave privada SSH finalizada que você nunca edita. 700 (rwx------) é um diretório em que só o dono pode entrar, como ~/.ssh ou ~/.gnupg. Ao contrário de 644 e 755, eles não concedem nada a mais ninguém.

Por que consigo listar um diretório, mas não entrar nele com cd?

As permissões de diretório separam a listagem da travessia: o bit r deixa você listar nomes, o bit x deixa você entrar. Um diretório com r mas sem x (um diretório 644) mostra seus nomes no ls, mas bloqueia o cd e qualquer acesso aos arquivos lá dentro. Adicione execução (torne-o 755) para deixá-lo acessível.

As permissões de arquivo funcionam do mesmo jeito no macOS e no Linux?

As permissões de arquivo compartilham o mesmo modelo central rwx e octal nos dois, porque ambos seguem o POSIX, mas os detalhes diferem. BSD e macOS limpam o setuid/setgid de um diretório num chmod numérico por padrão, enquanto o Linux o preserva. Ler um modo também difere: stat -c '%a' file no Linux, stat -f '%Lp' file no macOS, e o macOS acrescenta ACLs e flags de arquivo.

Posso mudar permissões de arquivo sem a linha de comando?

Você pode calcular e decodificar permissões sem um terminal. A calculadora chmod gratuita deixa você marcar uma matriz de permissões, digitar um valor octal ou colar uma linha do ls -l, e devolve o comando chmod exato. Aplicá-lo a um arquivo real ainda exige esse comando no servidor, ou um cliente GUI ou FTP que exponha campos de permissão.

Tags: linux chmod file-permissions permissions security

Artigos relacionados

Ver todos os artigos