chmod: Modos Numerico e Simbolico de Permissoes
Quais sao as "duas formas de escrever" do chmod?
chmod e alguns artigos escrevem chmod 644 enquanto outros escrevem chmod u+x. Qual esta correto?chmod tem duas notacoes: o modo numerico, onde voce define tudo de uma vez com digitos, e o modo simbolico, onde voce usa letras como u+x. Eles simplesmente expressam a mesma coisa de formas diferentes.O chmod altera as permissoes de arquivos e diretorios. Voce pode especifica-las com modo numerico (digitos como 644) ou modo simbolico (letras como u+x). Ambos podem definir exatamente as mesmas permissoes.
Em uma linha
- Modo numerico --> quando voce quer definir toda a permissao "de uma so vez" (
chmod 644 file) - Modo simbolico --> quando voce quer "adicionar ou remover apenas um pouco" do estado atual (
chmod u+x file)
O Que Voce Vai Aprender
- Que o modo numerico (
644,755) e o modo simbolico (u+x,go-w) descrevem as mesmas permissoes - Como calcular o modo numerico usando
r=4,w=2,x=1 - Como montar o modo simbolico com
u/g/o/ae+/-/= - Como escolher entre "definir tudo" e "adicionar/remover um pouco"
- Um padrao seguro que evita acidentes como
chmod 777
1. A base compartilhada: rwx e tres publicos
Conclusao: Permissoes concedem leitura (r), escrita (w), execucao (x) ao dono (u), grupo (g) e outros (o). Tanto o numerico quanto o simbolico apenas descrevem isso.
ls -l mostra algo como rwxr-xr-x, parece um feitico para mim...rwx e o dono, o proximo r-x e o grupo, o ultimo r-x e todos os outros. r significa ler, w significa escrever, x significa executar.$ ls -l script.sh
-rwxr-xr-x 1 user user 128 Jun 5 10:00 script.sh
| Posicao | Publico | Letra | Neste exemplo | Significado |
|---|---|---|---|---|
| caracteres 1-3 | dono | u (user) |
rwx |
ler, escrever, executar |
| caracteres 4-6 | grupo | g (group) |
r-x |
ler e executar |
| caracteres 7-9 | outros | o (other) |
r-x |
ler e executar |
a (all) e um atalho que significa "u + g + o juntos." Vamos usa-lo mais adiante.
2. Modo simbolico: pense em adicionar e remover
Conclusao: O modo simbolico e "quem (u/g/o/a) + como (+/-/=) + o que (r/w/x)." Ele altera a partir do estado atual, entao a intencao fica clara.
O modo simbolico combina tres partes:
| Parte | Letras | Significado |
|---|---|---|
| quem | u / g / o / a |
dono / grupo / outros / todos |
| como | + / - / = |
adicionar / remover / definir (sobrescrever) |
| o que | r / w / x |
leitura / escrita / execucao |
2-1. Adicionar execucao para o dono
$ chmod u+x script.sh
u (dono) mais + (adicionar) mais x (executar). Agora so voce pode executa-lo.
2-2. Remover escrita do grupo e outros
$ chmod go-w secret.txt
g e o (grupo e outros), - (remover), w (escrita). Voce pode apontar para multiplos publicos de uma vez.
2-3. Deixar somente leitura para todos (o poder do =)
$ chmod a=r notes.txt
a (todos), = (definir), somente r. = limpa as permissoes atuais primeiro e depois as define, entao mesmo que escrita ou execucao estivessem presentes, o resultado e garantidamente "somente leitura."
+ e =?+r significa "adicionar leitura ao que ja existe." =r significa "deixar somente leitura (remover o resto)." Quando voce quer ter certeza de que a execucao foi removida, = e pratico.Voce pode combinar especificacoes com virgulas: chmod u+x,go-w file adiciona execucao para o dono e remove escrita do grupo e outros em um unico comando.
3. Modo numerico: a matematica r=4 w=2 x=1
Conclusao: O modo numerico soma r=4, w=2, x=1 em um unico digito, depois alinha tres digitos para dono, grupo e outros.
644e dono rw, outros r.
6 em 644?r e 4, w e 2, x e 1. Basta somar. rw- e 4+2=6, r-- e 4. Entao dono 6, grupo 4, outros 4 resulta em 644.Memorize a pontuacao de cada permissao.
| Permissao | Pontuacao |
|---|---|
r (leitura) |
4 |
w (escrita) |
2 |
x (execucao) |
1 |
Cada digito representa as permissoes de um publico, alinhados como dono, grupo, outros.
| Digito | Soma | Letras | Significado |
|---|---|---|---|
| 7 | 4+2+1 | rwx |
tudo |
| 6 | 4+2 | rw- |
leitura e escrita |
| 5 | 4+1 | r-x |
leitura e execucao |
| 4 | 4 | r-- |
somente leitura |
| 0 | 0 | --- |
sem permissao |
3-1. Combinacoes numericas comuns
$ chmod 644 notes.txt # rw-r--r-- um arquivo normal $ chmod 755 script.sh # rwxr-xr-x script executavel ou diretorio $ chmod 600 id_rsa # rw------- chave privada, somente dono
| Numerico | Letras | Uso comum |
|---|---|---|
644 |
rw-r--r-- |
arquivo normal (so o dono edita) |
755 |
rwxr-xr-x |
scripts e diretorios |
600 |
rw------- |
chaves privadas, arquivos de senha |
700 |
rwx------ |
diretorio somente do dono |
Dica para leitura: leia 755 um digito por vez como "7=rwx, 5=r-x, 5=r-x." Com r=4 w=2 x=1 memorizado, voce pode transitar livremente entre letras e digitos.
4. Qual usar? Um padrao para escolher
Conclusao: Use numerico para "definir toda a permissao," simbolico para "adicionar ou remover um pouco do estado atual." Escolha aquele cuja intencao fica mais clara.
| O que voce quer | Recomendado | Exemplo |
|---|---|---|
| Definir toda a permissao de uma vez | numerico | chmod 644 file |
| Adicionar ou remover do atual | simbolico | chmod u+x file |
| Alterar sem mexer nos outros | simbolico | chmod g+w file |
| Restringir chave privada ao dono | numerico | chmod 600 id_rsa |
| Remover execucao de todos | simbolico | chmod a-x file |
Regra pratica
- Apenas adicionar execucao a um script -->
chmod +x script.sh(equivale aa+x) - Redefinir um arquivo de configuracao para permissoes padrao -->
chmod 644 config.yaml
5. Acidentes comuns e o padrao seguro
Conclusao:
chmod 777concede "tudo para todos" e e perigoso. O padrao seguro e dar apenas a permissao minima necessaria.
Um acidente frequente: chmod 777
$ chmod 777 file # rwxrwxrwx = qualquer um pode ler, escrever e executar
Definir 777 "porque fez o Permission denied sumir" e o pior padrao. Concede escrita e execucao ate para outros, abrindo uma falha de seguranca.
777 porque comecou a funcionar, entao achei que estava tudo bem...ls -l, depois adicione apenas o que esta faltando. Se voce so nao consegue executar, chmod u+x e suficiente. 777 quase nunca tem uso real.Cuidado com x em diretorios
Para um diretorio, x e a permissao para "entrar nele (cd)." Apenas com r, voce pode listar mas nao entrar. Diretorios comumente usam 755 (rwxr-xr-x).
O padrao seguro sao estes tres passos:
- Verifique a permissao atual com
ls -l - Decida "quem esta faltando ou tem excesso de que"
- Adicione apenas o minimo necessario, como
chmod u+x
6. Pratica (5 minutos)
Conclusao: Defina a mesma permissao em ambos os modos numerico e simbolico, depois confirme com
ls -lque os resultados sao iguais.
$ touch demo.txt $ ls -l demo.txt $ chmod 600 demo.txt $ ls -l demo.txt
-rw------- 1 user user 0 Jun 5 10:10 demo.txt
Agora construa o mesmo rw------- em modo simbolico.
$ chmod a=,u=rw demo.txt $ ls -l demo.txt
-rw------- 1 user user 0 Jun 5 10:11 demo.txt
O que verificar:
- Confirme que
600ea=,u=rwambos produzemrw------- - Explique
6 = rwusando a somar=4 w=2 x=1
Se tiver tempo, tente verificar se chmod 755 demo.txt e chmod u=rwx,go=rx demo.txt dao o mesmo resultado.
Resumo
| O que voce quer | Modo numerico | Modo simbolico |
|---|---|---|
| Arquivo normal | chmod 644 file |
chmod u=rw,go=r file |
| Script executavel | chmod 755 file |
chmod u=rwx,go=rx file |
| Adicionar execucao | (precisa da spec completa) | chmod u+x file |
| Remover escrita | (precisa da spec completa) | chmod go-w file |
| Chave privada | chmod 600 file |
chmod a=,u=rw file |
Tres coisas para lembrar
- r=4 w=2 x=1: a soma permite ler e escrever o modo numerico
- u/g/o/a e +/-/=: o modo simbolico e "quem, como, o que"
- Numerico para o estado final, simbolico para adicionar/remover: escolha pelo objetivo