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 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
- Calculadora CIDR / de sub-redes
Decomponha uma rede, verifique pertença e divida-a.
- Explicador de expressões cron
Leia uma expressão cron e veja quando ela roda de fato.
- Qual é o meu IP
Os seus IPv4 e IPv6 públicos, e qual deles o navegador usou.
- Conversor de timestamp Unix
Converte tempo epoch em data, e de volta.