Algumas pessoas já me pediram explicação sobre permissões no Linux, alegando que não entendem como dar permissão pelo terminal, e essas coisas.
Recentemente tive a oportunidade de explicar a um amigo, lá pelo discord do Mente Binária (http://menteb.in/discord), e então já fomos anotando as informações para montar um POST. Assim, o mesmo conteúdo poderá ser utilizado outras vezes, com outras pessoas.
Então aqui vai uma breve explicação inicial sobre permissões nos sistemas semelhantes à Linux..Vale para *nix na realidade.
A explicação que segue foi preparada com as minhas próprias palavras e uma maneira simples de tentar explicar algo que muitos acham complexo.
Sempre começo informando que permissão é fácil duma vez.. e digo: – “421 – grava esse número.”
Permissões se resumem à possibilidade ou não de Leitura, Escrita e Execução em arquivos ou diretórios.
Cada uma dessas possibilidades, é expressa por números com valores:
Leitura = 4
Escrita = 2
Execução = 1
Por isso a dica de memorizar o número 421.
Leitura em inglês é traduzido como Read
Escrita em inglês é traduzido como Write
Execução em inglês é traduzido como eXecute
Note as letras em destaque em Read/Write/eXecute: r w x
Por isso, quando se dá um comando “ls -l” com o objetivo de listar os arquivos e pastas no diretório atual, se vê algo parecido com:
-rwxrwx--- e outros detalhes como dono, grupo e nome do arquivo
Essas letrinhas aí significam o seguinte:
r significa que esse arquivo tem permissão de leitura (Read)
w significa que tem permissão de escrita (Write)
x significa que tem permissão de execução (eXeCution)
♥Daí surge a pergunta: mas por quê não apenas rwx e sim rwxrwxrwx? Parece que está repetindo. Não parece?
Talvez isso é o que confunde muita gente.
É que são três grupos: rwx pro dono do arquivo… rwx pro grupo do arquivo… e rwx pra outros (ou qualquer um, enfim tudo que não for dono e grupo)
Sempre começa com um traço, e depois os três grupos. Assim:
-[---][---][---] e outros detalhes como dono, grupo e nome do arquivo
Se contarmos quantos rwx tem, vai ver que, em condições básicas de permissão, serão sempre 9. Sendo 3 pra dono 3 pra grupo 3 pra outros.
Agora o 421 numericamente falando, são as permissões de usuários. Para manipular as permissões de um arquivo, usa-se uma matemática de simples soma com esses números.
Se temos um arquivo aaa.txt e queremos deixar sem permissão pra nada, o comando seria:
$ chmod 000 aaa.txt
Daí o “ls -l” mostraria algo do tipo:
---------- aaa.txt
Ou seja, o arquivo está sem permissão alguma. Nem o dono conseguirá ler o conteúdo do arquivo.
Agora, se quiser que o dono do arquivo tenha permissão de leitura, o comando seria:
$ chmod 400 aaa.txt
Daí o “ls -l” mostraria algo do tipo:
-r--------- aaa.txt
Até aqui, estamos aprendendo como manipular essas atribuições de permissões.
Lembrando que no comando chmod, os números passados como argumento se referem a permissão, mas a posição de cada algarismo se refere a dono, grupo e outros…
Por exemplo: agora queremos que só os outros tenham permissão de leitura, então o comando seria:
$ chmod 004 aaa.txt
Daí o “ls -l” mostraria algo do tipo:
-------r-- aaa.txt
Sacou a ideia?
Faça um desenho no papel e tudo fica mais claro.. e aproveite para ir testando num terminal também, claro.
Note que, nos comandos de exemplo de chmod que foram usados até aqui, falamos apenas de permissão de leitura, por isso só trabalhamos no número 4..
Leitura em inglês é Read = 4
Escrita em iinglês é Write = 2
Execucão em inglês é eXecute = 1
Então, pra todos (dono, grupo e outros) terem permissão de executar, o comando seria assim:
$ chmod 111 aaa.txt
Daí o “ls -l” mostraria algo do tipo:
---x--x--x aaa.txt
Ao executar o comando chmod seguido de algum número como argumento, são 3 posições:
$ chmod [][][] algum.arquivo.extensao
A primeira posição é usada para permissão de dono
A segunda posição é usada para permissão de grupo
A terceira posição é usada para permissão de outros (ou qualquer um, enfim tudo que não for dono e grupo)
Na primeira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de dono (ou leitura, ou escrita, ou execução)
Na segunda posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de grupo (ou leitura, ou escrita, ou execução)
Na terceira posição [] pode-se colocar ou 4 ou 2 ou 1.. para permissão de outros (ou leitura, ou escrita, ou execução)
E pronto! Isso é o básico de permissão em *nix!
Vamos seguir com mais alguns exemplos para fixar bem o que aprendemos até aqui.
Um comando como esse:
$ chmod 421 aaa.txt
Deixaria o arquivo aaa.txt com as seguintes permissões:
-r---w---x aaa.txt
…pois com o número 421 estamos na realidade atribuindo três posições: [4][2][1]
4 para dono
2 para grupo
1 para outros
Agora um ponto bem importante:
Um arquivo totalmente aberto com todas as permissões para todo tipo de usuário é perigoso, praticamente público, mas o comando para fazer isso seria assim:
$ chmod 777 aaa.txt
Daí o “ls -l” mostraria algo do tipo:
-rwxrwxrwx aaa.txt
Usa-se o número 7 pois quero dar rwx (4+2+1) = 7
Note que temos uma soma matemática aí.
matemática 4+2+1=7 pra dono
matemática 4+2+1=7 pra grupo
matemática 4+2+1=7 pra outros
Ao passo que se compreende a soma, é possível montar a permissão que quiser. Por exemplo:
100 apenas o dono executa.
200 apenas o dono escreve.
300 apenas o dono escreve e executa (2+1=3).
400 apenas o dono lê.
500 apenas o dono lê e executa (4+1=5).
600 apenas o dono lê e escreve (4+2=6).
700 apenas o dono lê, escreve e executa (4+2+1=7).
010 apenas o grupo executa.
020 apenas o grupo escreve.
030 apenas o grupo escreve e executa (2+1=3).
040 apenas o grupo lê.
050 apenas o grupo lê e executa (4+1=5).
060 apenas o grupo lê e escreve (4+2=6).
070 apenas o grupo lê, escreve e executa (4+2+1=7).
001 apenas outros executa.
002 apenas outros escreve.
003 apenas outros escreve e executa (2+1=3).
004 apenas outros lê.
005 apenas outros lê e executa (4+1=5).
006 apenas outros lê e escreve (4+2=6).
007 apenas outros lê, escreve e executa (4+2+1=7).
E o segredo para nunca mais esquecer é praticar.
Veja esse diagrama:
Da autoria de Julia Evans (@b0rk) que é uma excelente professora. Como comentado por ela, existem mais opções avançadas de permissões, tais como setuid, setgid, sticky.
Ainda outra vertente seria a manipulação de permissões ainda usando o comando chmod mas usando as letras ao invés de números, tais como:
chmod +r aaa.txt
chmod +w aaa.txt
chmod +x aaa.txt
Onde se pode manipular permissões para dono, grupo e outros também.
Mas essas linhas ficam então para você pesquisar e continuar a aprender sobre permissões no Linux.
Espero que tenha gostado da explicação e aprendido algo.
E se surgirem dúvidas, poste um comentário aqui que respondo assim que eu puder, se eu souber.
Forte abraço e como sempre muito obrigado pela leitura!