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 ficheiro 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 grelha de caixas, para que possa partir da que tem e copiar a de que precisa.

Tudo corre no seu navegador e é aritmética pura: não há servidor e nada do que escreve é enviado para lado 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 ficheiro, 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 ficheiro, ou listar as entradas de um diretório.
  • Escrita (w) — alterar o ficheiro, ou acrescentar e remover entradas num diretório.
  • Execução (x) — correr o ficheiro como programa, ou entrar num diretório e chegar aos ficheiros lá dentro.

A execução significa algo diferente num diretório e num ficheiro, e isso apanha 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 ficheiro 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 ficheiro comum, um l para uma ligação simbólica. Esse caractere inicial é o tipo do ficheiro, 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 fá-lo correr como dono do ficheiro em vez do utilizador que o lançou. É assim que o passwd pode atualizar um ficheiro 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 ficheiro. Num diretório faz algo mais útil e mais seguro: os ficheiros 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 ficheiro o pode apagar ou renomear, mesmo quando todos podem escrever no diretório. É o que mantém o /tmp partilhado mas seguro. Num ficheiro 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 ficheiro que não é executável, pelo que o bit não tem sobre o que atuar.

Octal ou simbólico na linha de comandos

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 ficheiro 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 comandos 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 utilizadores 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 ficheiro 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 ficheiro 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 ficheiro, e só você sabe qual tem.

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 ficheiro comum. 755 acrescenta execução aos três grupos, que é o que um programa precisa para correr e um diretório precisa para ser atravessado. Use 644 para documentos e ficheiros de código, 755 para scripts e diretórios.
Porque é 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 ficheiro que ninguém pode executar.
O que faz realmente o chmod 777 e porque é 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 ficheiro em que todos podem escrever é um ficheiro que qualquer pessoa pode adulterar, e um diretório em que todos podem escrever é um onde qualquer pessoa pode colocar ficheiros. 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 é aceite 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 (ficheiro, diretório, ligação) 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 corre no seu navegador. Nada é carregado, registado ou guardado, e é também por isso que funciona sem qualquer ligação à rede.