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.
| Classe | Leitura | Escrita | Execução |
|---|---|---|---|
| Dono | |||
| Grupo | |||
| Outros |
chmod 644 filechmod u=rw,g=r,o=r file-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.