Calculadora chmod

Converte permissões de arquivos Unix entre octal (755), simbólico (rwxr-xr-x) e uma grade de caixas, com setuid, setgid e o bit sticky.

Modos comuns
ClasseLeituraEscritaExecução
Dono
Grupo
Outros
Octal
Simbólico
Comando octal
chmod 644 file
Comando simbólico
chmod u=rw,g=r,o=r file
Estilo ls -l
-rw-r--r--

O que esta ferramenta faz

Cada arquivo num sistema Unix tem um conjunto de permissões que decide quem o pode ler, alterar ou executar. O comando chmod define-as e aceita essas permissões em duas grafias bastante diferentes — um número octal de três dígitos e uma cadeia de letras — que descrevem exatamente a mesma coisa. Esta ferramenta mantém ambas as grafias sincronizadas, e ainda uma grade de caixas, para que possa partir da que tem e copiar a de que precisa.

Tudo roda no seu navegador e é aritmética pura: não há servidor e nada do que escreve é enviado para lugar nenhum. É uma calculadora e uma referência, não uma forma de alterar permissões numa máquina real — para isso copia o comando chmod que ela produz e executa-o você mesmo.

Três grupos, três permissões

As permissões estão organizadas em três grupos de três. Os grupos são o dono do arquivo, o grupo a que pertence e todos os outros — «outros». Dentro de cada grupo há três permissões: leitura, escrita e execução.

  • Leitura (r) — ver o conteúdo do arquivo, ou listar as entradas de um diretório.
  • Escrita (w) — alterar o arquivo, ou acrescentar e remover entradas num diretório.
  • Execução (x) — executar o arquivo como programa, ou entrar num diretório e chegar aos arquivos lá dentro.

A execução significa algo diferente num diretório e num arquivo, e isso pega muita gente: um diretório que pode ler mas não executar deixa-o ver os nomes do que lá está, mas não abrir nada.

Como funciona o número octal

As três permissões de cada grupo cabem num dígito octal somando valores fixos: leitura vale 4, escrita 2 e execução 1. Leitura-escrita-execução dá 4+2+1 = 7; leitura-execução dá 4+1 = 5; leitura-escrita dá 4+2 = 6. Três grupos dão três dígitos.

755
7 = 4+2+1   # dono: leitura + escrita + execução
5 = 4+0+1   # grupo: leitura + execução
5 = 4+0+1   # outros: leitura + execução

Assim, 755 significa «o dono pode tudo, os restantes podem ler e executar mas não alterar», o modo habitual de um programa ou de um diretório. 644 — leitura e escrita para o dono, apenas leitura para os outros — é o modo habitual de um arquivo comum. Quando o padrão se torna familiar, os modos comuns leem-se num relance.

A cadeia simbólica

A outra grafia é a que o ls -l imprime: nove caracteres, três por grupo, cada um a sua letra ou um hífen. 755 é rwxr-xr-x; 644 é rw-r--r--. Contém exatamente a mesma informação que o número octal, apenas disposta de modo a ver cada permissão em vez de somar dígitos de cabeça.

Uma linha de ls -l tem um décimo caractere no início: um d para um diretório, um hífen para um arquivo comum, um l para um link simbólico. Esse caractere inicial é o tipo do arquivo, não uma permissão, e o chmod não o pode mudar. Pode colar aqui todo o campo de permissões do ls -l: o caractere de tipo é simplesmente ignorado.

Os bits especiais: setuid, setgid e sticky

Acima dos nove bits comuns estão três especiais, escritos como um quarto dígito octal opcional à frente — setuid (4), setgid (2) e o bit sticky (1). Não têm coluna própria; em vez disso, cada um sobrepõe-se a uma casa de execução da cadeia simbólica, e daí vêm as maiúsculas que tanto confundem.

  • setuid num executável faz o programa rodar como dono do arquivo em vez do usuário que o lançou. É assim que o passwd pode atualizar um arquivo de sistema onde não pode escrever diretamente — e por isso um programa setuid com um erro é uma falha séria.
  • setgid num executável lança-o com o grupo do arquivo. Num diretório faz algo mais útil e mais seguro: os arquivos novos criados lá dentro herdam esse grupo em vez do grupo de quem os cria.
  • O bit sticky num diretório significa que só o dono de um arquivo o pode apagar ou renomear, mesmo quando todos podem escrever no diretório. É o que mantém o /tmp compartilhado mas seguro. Num arquivo comum não faz nada.

Na cadeia simbólica, um bit especial ativo transforma a sua casa de execução numa letra: s na casa do dono para setuid, s na do grupo para setgid e t na dos outros para sticky. A caixa da letra diz se a execução também está ativa — minúscula significa sim, maiúscula significa não.

rwsr-xr-x  4755   # setuid, e o dono executa
rwSr-xr-x  4655   # setuid, mas o dono NÃO executa
rwxrwxrwt  1777   # sticky, e os outros executam
rwxrwxrwT  1776   # sticky, mas os outros NÃO executam

Um S ou T maiúsculo é quase sempre um erro: significa que um bit especial foi posto num arquivo que não é executável, portanto o bit não tem sobre o que atuar.

Octal ou simbólico na linha de comando

O chmod aceita as duas formas e esta ferramenta escreve ambas. A forma octal define todos os bits de uma vez: chmod 755 file. A forma simbólica com = faz o mesmo de modo absoluto — chmod u=rwx,g=rx,o=rx file — listando cada grupo para que o resultado não dependa de como o arquivo estava antes.

Existe uma terceira forma, relativa, de que a calculadora não precisa mas com a qual se irá cruzar: chmod +x file acrescenta execução para todos, chmod g-w file retira a escrita ao grupo, chmod o= file limpa tudo para os outros. Essa forma altera bits em relação ao modo atual em vez de definir o conjunto, o que é prático na linha de comando mas não tem um «resultado» único para mostrar.

Modos que é melhor não definir

Uma ferramenta de permissões também deve dizer quando um modo é má ideia. Dois surgem constantemente:

  • 777 dá a todos os usuários leitura, escrita e execução. É a correção reflexa quando algo «não funciona» e quase sempre troca um problema pequeno por um buraco de segurança real. O modo certo é quase sempre mais estreito — normalmente 755 ou 644.
  • Qualquer arquivo gravável por todos (o último dígito a incluir 2) permite que qualquer conta da máquina reescreva o seu conteúdo. Para algo que é executado, carregado ou tido como fidedigno, isso é uma porta de entrada. Dê a escrita a um grupo, ou guarde-a para o dono.

A ferramenta assinala-os quando ocorrem. Não pode saber se o seu alvo é um arquivo ou um diretório, por isso apresenta-os como coisas que merecem um segundo olhar e não como erros — o bit sticky está certo num diretório e é inútil num arquivo, e só você sabe qual tem.

O que significa chmod 755

É o modo em que quase todo script, programa e diretório acaba, e ele se lê um grupo por vez. Cada dígito são as três permissões daquele grupo somadas — leitura 4, escrita 2, execução 1 —, então 7 são as três e 5 é leitura mais execução, deixando a escrita de fora.

  • Dono — 7 = 4+2+1. Leitura, escrita e execução: você pode editar o arquivo e executá-lo.
  • Grupo — 5 = 4+0+1. Leitura e execução, sem escrita: os integrantes do grupo do arquivo podem lê-lo e executá-lo, e não podem alterá-lo.
  • Outros — 5 = 4+0+1. A mesma coisa outra vez: qualquer outra conta da máquina pode lê-lo e executá-lo, e nenhuma pode alterá-lo.

Escrito por inteiro isso é rwxr-xr-x, e o comando é chmod 755 file — ou chmod u=rwx,g=rx,o=rx file, se você preferir as letras. Num diretório os mesmos bits se leem de outro jeito, porque ali a execução significa que você pode entrar e chegar ao que está dentro: 755 é um diretório que qualquer um pode listar e atravessar, enquanto só o dono pode acrescentar ou remover entradas. Sobre 755 a calculadora não diz nada, e isso é de propósito: é o modo mais estreito que ainda deixa outras contas executarem o que você escreveu. Se o grupo também precisa editar o arquivo, o modo que acrescenta a escrita do grupo é 775, e não 777.

O que significa chmod 644, e por que seus arquivos já o têm

644 é 755 sem nenhum bit de execução: 6 = 4+2 para o dono, depois 4 = 4+0+0 para o grupo e outra vez 4 para outros, ou seja rw-r--r--. Ninguém pode executá-lo, e é exatamente isso que cabe a tudo que só é lido — um documento, uma página HTML, um arquivo de configuração, um arquivo fonte que outro programa compila. Num diretório, por outro lado, ele não é restritivo mas quebrado: sem execução nada consegue entrar, então os nomes de dentro se listam e nenhum deles abre.

É também o modo que um arquivo novo costuma ter antes de alguém tocar nele, e a razão se chama umask. Um programa que cria um arquivo normalmente pede 666 e um que cria um diretório pede 777; depois a umask apaga os bits que ela nomeia, antes mesmo de o arquivo existir. Com a umask comum 022 — escrita retirada do grupo e de outros — 666 vira 644 e 777 vira 755, e é por isso que esses dois estão em todo lugar e por isso que são os dois primeiros modos que esta ferramenta oferece. Digite umask num shell para ver o valor que você tem.

  • umask 022, o valor padrão habitual: um arquivo novo sai 644 e um diretório novo sai 755.
  • umask 002, usada onde cada usuário tem um grupo próprio: 664 e 775, então os integrantes do grupo também podem editar.
  • umask 077, o ajuste privado: 600 e 700, que ninguém além do dono consegue nem ler.

Todos os seis são modos prontos aqui, e não é coincidência: são as três umask que as pessoas realmente definem, aplicadas uma vez a um arquivo e uma vez a um diretório. Ler os seis como três pares é o caminho mais rápido para parar de consultar modos.

O que significa chmod 711: entre, mas não olhe

711 é o modo comum que entrega execução sem leitura: 7 = 4+2+1 para o dono, depois 1 = 0+0+1 duas vezes, ou seja rwx--x--x. Ele só faz sentido quando você separa de novo as duas permissões de diretório — a leitura lista os nomes, a execução deixa passar — e por isso num diretório com 711 entra qualquer um que já saiba o nome do que procura, e ninguém consegue listá-lo.

  • Num diretório isso é realmente útil. Um diretório pessoal com 711 deixa um servidor web, ou outra conta de uma máquina compartilhada, abrir /home/you/public/report.pdf enquanto ls /home/you é recusado. Nada fica escondido do dono; os nomes é que não podem ser enumerados de fora.
  • Num arquivo é quase inútil. Executar um script de shell quer dizer que um interpretador abre o arquivo e o lê, então a execução sem leitura falha; só continua funcionando um binário compilado, que o próprio núcleo carrega. Se você queria um script que outros pudessem executar, você queria 755.

Sobre 711 a calculadora também não diz nada, porque ele é mais estreito que 755 e não mais largo: não concede nada que 755 não conceda. Os vizinhos aparecem pela mesma razão — 751 dá ao grupo a listagem negada a outros, e 700 retira até a passagem, que é o que um diretório destinado a uma única conta quer.

777 e 1777: um bit de diferença e conselhos diferentes

Os dois modos que um diretório compartilhado costuma atrair diferem por um único bit, e esta ferramenta responde a eles de forma diferente de propósito. 777 é rwxrwxrwx e volta assinalado como perigo; 1777 é rwxrwxrwt, volta como uma nota simples e é um dos modos prontos acima: é o modo que /tmp tem de verdade.

  • 777 — cada dígito é 4+2+1: leitura, escrita e execução para o dono, o grupo e todos os outros. Não sobra nada protegendo nada: qualquer conta pode reescrever o arquivo, e qualquer conta pode apagar ou substituir uma entrada num diretório que o carregue. É a correção reflexa diante de um problema de permissões, e quase sempre troca um problema pequeno por um real.
  • 1777 — os mesmos nove bits mais o bit sticky, que permite apagar e renomear uma entrada só ao dono daquela entrada. Essa única restrição é o que torna seguro deixar um diretório gravável por todos, e é por isso que /tmp funciona: qualquer um pode criar um arquivo ali e ninguém pode remover o de outra pessoa.

A distinção só vale onde outros também têm execução, e nisso a ferramenta é rigorosa. 1666 é rw-rw-rwT — o bit sticky posto onde nenhum grupo tem execução — e nada dessa forma pode ser um diretório utilizável, então o bit sticky não guarda nada e o modo é assinalado como gravável por todos com a gravidade cheia, exatamente como 666. O T maiúsculo diz a mesma coisa num caractere.

Então: um diretório que precisa ser compartilhado quer 1777, ou melhor ainda 775 com o grupo certo; e um arquivo que não abre é quase sempre um problema de propriedade e não um caso para 777.

Perguntas frequentes

Qual é a diferença entre 644 e 755?
644 é leitura e escrita para o dono e apenas leitura para os restantes, o modo habitual de um arquivo comum. 755 acrescenta execução aos três grupos, que é o que um programa precisa para rodar e um diretório precisa para ser atravessado. Use 644 para documentos e arquivos de código, 755 para scripts e diretórios.
Por que o meu modo mostrou um S ou T maiúsculo?
Porque um bit especial foi posto num grupo que não tem permissão de execução. Um s ou t minúsculo significa que tanto o bit especial como a execução estão ativos; a forma maiúscula significa que o bit especial está ativo mas a execução não, o que normalmente indica que o modo não é o pretendido — por exemplo, 4644 (rwSr--r--) é setuid num arquivo que ninguém pode executar.
O que faz realmente o chmod 777 e por que ele é desaconselhado?
Concede leitura, escrita e execução ao dono, ao grupo e a todos os outros — acesso total para todas as contas do sistema. É desaconselhado porque remove todas as proteções de uma só vez; um arquivo em que todos podem escrever é um arquivo que qualquer pessoa pode adulterar, e um diretório em que todos podem escrever é um onde qualquer pessoa pode colocar arquivos. Quase todos os casos que recorrem a 777 resolvem-se com 755 ou 644 e a posse correta.
O dígito inicial tem de estar lá?
Não. Quando nenhum bit especial está ativo, o modo tem apenas três dígitos — 755, não 0755 — e é isso que esta ferramenta mostra. Um zero inicial é aceito e significa o mesmo; um 4, 2 ou 1 inicial liga setuid, setgid ou o bit sticky, respetivamente.
Posso colar uma linha diretamente do ls -l?
Sim. Cole o campo de permissões de dez caracteres, como -rwxr-xr-x ou drwxr-xr-x, e a ferramenta retira o caractere de tipo inicial e lê o resto. O tipo (arquivo, diretório, link) não é uma permissão e o chmod não o pode mudar, por isso é ignorado.
Algo do que introduzo é enviado para um servidor?
Não. A ferramenta inteira é aritmética que roda no seu navegador. Nada é carregado, registrado ou armazenado, e é também por isso que funciona sem qualquer conexão à rede.
O que o chmod 711 faz?
Dá tudo ao dono e dá ao grupo e a todos os outros apenas execução — rwx--x--x. Num diretório isso quer dizer que eles podem atravessá-lo até um caminho que já conhecem mas não podem listar o que há dentro, que é o que um diretório pessoal numa máquina compartilhada costuma querer. Num arquivo não serve: um script de shell precisa ser lido pelo seu interpretador para rodar, então execução sem leitura simplesmente falha.
Qual é a diferença entre chmod 777 e chmod 1777?
Um bit — o bit sticky, escrito como o 1 inicial, que muda o último caractere de x para t. Os dois dão a cada conta leitura, escrita e execução; 1777 ainda permite apagar ou renomear uma entrada só ao dono dela. Por isso esta ferramenta assinala 777 como quase nunca correto e chama 1777 de modo padrão de um diretório compartilhado como /tmp.
Por que arquivos novos saem 644 e diretórios novos saem 755?
Por causa da umask. Um programa que cria um arquivo pede 666 e um que cria um diretório pede 777, e a umask apaga bits disso antes mesmo de o arquivo existir. O valor comum, 022, retira a escrita do grupo e de outros, e sobram 644 e 755. Rode umask num shell para ver o seu: 002 dá 664 e 775, e 077 dá 600 e 700.
O que significa rwxr-xr-x?
É 755 escrito por inteiro. Leia de três em três caracteres: rwx é o dono, com leitura, escrita e execução; r-x é o grupo, com leitura e execução mas sem escrita; r-x outra vez são todos os outros. Um hífen quer dizer que aquela permissão está desligada. Cole a cadeia no campo «Simbólico» daqui e a caixa «Octal» mostrará 755.

Ferramentas relacionadas