quinta-feira, 30 de setembro de 2010

PERMISSÕES DE ACESSO NO LINUX

|------indica que é um diretorio
| |----------------leitura do usuário
| ||------------------escrita do usuario
| |||--------------------gravação do usuário
| |||
| ||| |------------leitura do grupo
| ||| ||--------------escrita do grupo
| ||| |||----------------gravação do grupo
| ||| |||
| ||| ||| |--------leitura de outros
| ||| ||| ||----------escrita de outros          
| ||| ||| |||------------gravação de outros
| ||| ||| |||
| ||| ||| |||
v vvv vvv vvv
d rwx rwx rwx

Antes de mais nada voltaremos lá nas aulas de conversões binárias do professor Targino, sabemos que para converter um número binário para decimal a melhor forma é seguir a sequência abaixo:
1  1  1  0  0  1  1 = Número binário que iremos converter para decimal se contar-mos veremos que tem 7 bits esta sequência binária, então começaremos com potência de 6 ou ^6, como a base é binária e queremos passar para decimal utilizaremos sempre o número base 2, vamos lá só pra relembrar.

2^6*1=64
2^5*1=32
2^4*1=16
2^3*0= 0
2^2*0= 0
2^1*1= 2
2^0*1= 1 --> Todo número elevado a zero é zero só que multiplicado por 1 ficaria 1 mesmo.
Veja que a terceira coluna numérica, a sequência de cima para baixo é a mesma sequência do nosso número binário em questão.
Somaremos os resultados e ficaria um valor de 64+32+16+0+0+2+1= 115 este é o nosso número decimal.

Para simplificar as coisas podemos utilizar um recurso que facilita a nossa compreenssão e agilisa nossa conversão, veja o exemplo abaixo, se iniciar-mos a sequência da direita para esquerda iniciaremos sempre com o nº 1 e ficaria assim:
1 2 4 8 16 32 64 128 256 512 1024, então para dar tudo certo inverta esta sequência assim:
1024 512 256 128 64 32 16 8 4 2 1, esta é a sequência correta para a nossa conversão.
Se tivesse-mo que converter o seguinte número binário para decimal fariamos assim.
1024 512  256  128   64   32   16   8    4    2    1
 1    1    1    1    1    1    1    1    1    1    1

A maquina entende que o número 1 é um estado ligado ou sim ou positivo e entende que o zero é um estado desligado ou não ou negativo no sistema computacional. Então o nosso número binário estão todos ligado se tivesse algum zero diriamos que teria algum desligado, como estão todos ligado somamos todos, 1024+512+256+128+64+32+16+8+4+2+1=2047 o resultado é o número decimal que precisamos.

Vamos voltar para nossa questão principal, permissões de acessos à arquivos e pastas, onde só precisamos de utilizar três posições binárias e nada mais ou seja trabalhar com número decimal máximo 7.

4   2   1 = 7
1   1   1 = número binário
Onde só somariamos os binários ligados ou seja com "1",os que estão zero "0" quer dizer que estão desligado ou nulo não será usado.
Então o valor em decimal ficaria assim:
4+2+1=7 isso se aplica da mesma forma com o nosso comando de permissão, se podemos enxergar o rwx é sinal que estão todos ligados o representado em binário ficaria assim 111 ou 7 em decimal, mas se podemos ver somente r-- então somente o "r" está ligado o que indica o número binário 100 que convertido para decimal ficaria 400 ou 4, ou seja, daremos comando somente leitura seja pra quem for especificado usuário, grupo ou outros o que também pode ser representado como chmod 444 [nome o arquivo ou pasta] sendo assim usuário, grupo ou outros só poderão ler e não poderão escrever e nem executar nada, no final do comando será representado assim:
- r-- r-- r-- assim estamos dando somente permissão de leitura para todos neste "-" arquivo
d r-- r-- r-- assim estamos dando somente permissão de leitura para todos neste "d" diretório

Para fixar-mos vamos dar o comando chmod 154 [nome do arquivo ou pasta]
Vamos representa este decimal em binário ficaria assim: --x r-x r--
Como já sabemos a primeira coluna de 3 letras (rwx) representa permissões para usuários a segunda para o grupo e a terceira para outros, traduzindo estamos dizendo o seguinte:
001=1 = --x = O usuário só possuíra permissão de execução
101=5 = r-x = Todos do grupo só terá permissão de leitura e execução mas não poderá gravar na pasta ou arquivo
100=4 = r-- = Os outros só poderão ler e não terão permissão para gravar ou executar nada.


=======================================================================================

|------o "d" indica que é um diretorio
| |----------------leitura do usuário
| ||------------------escrita do usuario
| |||--------------------gravação do usuário
| |||
| ||| |------------leitura do grupo
| ||| ||--------------escrita do grupo
| ||| |||----------------gravação do grupo
| ||| |||
| ||| ||| |--------leitura de outros
| ||| ||| ||----------escrita de outros          
| ||| ||| |||------------gravação de outros
| ||| ||| |||
| ||| ||| |||
v vvv vvv vvv
d rwx rwx rwx
1 111 111 111
   7   7   7 = chmod 777 [nome do diretório]

Quando existe um letra indica que o íten está ligado mas se aparecer um "-" (traço) indica que está desligado, no exemplo acima está dizendo que tanto o usuário o grupo como os outros terão acesso total ao diretório, pois existe o "d" de diretório e todos estão ligados, agora se estivesse assim:

|------o "-" indica que é um arquivo
| |----------------leitura do usuário
| ||------------------escrita do usuario
| |||--------------------gravação do usuário
| |||
| ||| |------------todos que pertence ao grupo pode ler o arquivo ou a pasta (leitura do grupo)
| ||| ||--------------ninguém que não pertença ao grupo pode escrever (escrita do grupo)
| ||| |||----------------todos que pertence ao grupo pode gravar no arquivo ou pasta (gravação do grupo)
| ||| |||
| ||| ||| |--------leitura de outros negada
| ||| ||| ||----------escrita de outros negada      
| ||| ||| |||------------gravação de outros negada
| ||| ||| |||
| ||| ||| |||
v vvv vvv vvv
- rwx r-x ---    
0 111 101 000
   7   5   0 = chmod 750 [nome do arquivo]

No exemplo logo acima está dizendo que é um arquivo pois existe um "-" traço, a falta do "d" indica um arquivo e não um diretório e que o usuário terá permissão total, mas o grupo só poderá ler e gravar mas não poderar escrever no arquivo e os demais não podera fazer nada nem ler nem escrever e nem executa o arquivo, assim o comando ficaria assim:
chmod 750 [nome do arquivo]

Pode-se dar permissão de varias maneiras a mais usual é utilizando a forma decimal utilizando o comando chmod que sem abreviações significa ch(change) mod(mode) e que em portugues quer dizer (ch)alterando o (mod)modo de acesso, sendo assim utilisaremos o seguinte comando: chmod 777 onde cada sete significa uma sequencia de três letras, nesse caso rwx do usuário= 7 rwx do grupo= 7 e rwx de outros= 7 o que ficaria representado da seguinte forma binária:
rwx rwx rwx
111 111 111
Que tranformando de binário para decimal firaria assim
 7   7   7
O que explica porque utilizar o comando chmod 777 para dar permissão total a qualquer um que acessar a pasta ou arquivo em questão.

Vamos a mais um exemplo:
Seguinte comando: chmod 700 onde cada sete significa uma sequencia de três letras, nesse caso rwx do usuário= 7 --- do grupo= 0 e --- de outros= 0 o que ficaria representado da seguinte forma binária:
rwx --- ---
111 000 000
Que tranformando de binário para decimal firaria assim:
 7   0   0
O que significaria que estamos dando total acesso para o usuário dono do arquivo ou pasta e que os demais seja ele quem for não poderá sequer acessar a pasta ou abrir o arquivo pois não possui permissão.

Para finalizar vamos dar permissão 666 para um arquivo o que representado ficaria assim:
Dariamos o seguinte comando: chmod 666 [o nome do arquivo]
O que ficaria representado da seguinte forma binária:
- rwx rwx rwx
  110 110 110
Que tranformando de binário para decimal firaria assim:
   6   6   6
Sendo assim estamos dando permissão de leitura e gravação para todos com o comando: chmod 666 [nome do arquivo] onde nesse caso rw- do usuário= 6 rw- do grupo= 6 e rw- de outros= 6

========================================================

Outa forma de dar-mos permissões é da seguinte forma:

Se quero que o usuário tenha somente permissão de leitura então digito:
chmod u+r nome da pasta ou arquivo = mudar permissão de leitura para usuario

Se quero que o usuário tenha somente permissão de escrita então digito:
chmod u+w nome da pasta ou arquivo = mudar permissão de gravação para usuario

Se quero que o usuário tenha somente permissão de execução então digito:
chmod u+x nome da pasta ou arquivo = mudar permissão de execução para usuario

Se quero retirar qualque uma dessas permissões digito o sinal de "-" menos ao invés do "+" mais e da mesma forma posso fazer com os grupos e outros, é só alterar a letra que indica que será manipulado:

u= usuário
g= grupo
o= outros
+= adicionar a permissão
-= retirar a permissãovoltando lá nas aulas do professor Targino sabemos que para converter um número binário para decimal

A melhor forma é seguir uma sequência como a seguir:
64  32  16  8   4   2   1
1   1   1   0   0   1   1 = número binário

Onde só somariamos os binários ligados ou seja com "1","0" quer dizer desligado ou nulo não será usado.
Então o valor em decimal ficaria assim:
64+32+16+2+1=115 e não 127 pois os dois zeros que teriam os valores somados e dariam 12 não conta.

Isso se aplica da mesma forma com o nosso comando de permissão, se podemos enxergar o rwx é sinal que estão todos ligados, mas se podemos ver somente r-- então somente o "r" está ligado o que indica o número binário 100 que convertido para decimal ficaria 400 ou seja daremos comando somente leitura seja pra quem for especificado, usuário, grupo ou outros o que também pode ser representado como chmod 444 [nome o arquivo ou pasta] sendo assim todos só poderão ler e não poderão escrever e nem executar nada.

Aqui tem outra forma que não conhecia e que foi ensinada pelo professor da disciplina do 2º semestre SL=Software Livre da faculdade FAJESU. Utilizamos somente letras que representa os respectivos ítens:

u = user ou usuário
g = group ou grupo
o = others ou outros
+ = adiciona permissões ou alguma característica ao ítem
- = retira permissões ou alguma característica ao ítem
r = reader ou leitura
w = write ou escrever
x = execute ou executar

montamos os comandos assim:

u+r = permissão de leitura para usuário
u+w = permissão de gravação para usuário
u+x = permissão de gravação para usuário

g+r = permissão de leitura para o grupo
g+w = permissão de gravação para o grupo
g+x = permissão de gravação para o grupo

o+r = permissão de leitura para outros
o+w = permissão de gravação para outros
o+x = permissão de gravação para outros

Os comandos ficariam assim:

chmod u+r [nome da pasta ou arquivo] = mudar permissão de leitura para o usuário
chmod u+w [nome da pasta ou arquivo] = mudar permissão de leitura para o usuário
chmod u+x [nome da pasta ou arquivo] = mudar permissão de leitura para o usuário

chmod g+r [nome da pasta ou arquivo] = mudar permissão de leitura para o grupo
chmod g+w [nome da pasta ou arquivo] = mudar permissão de leitura para o grupo
chmod g+x [nome da pasta ou arquivo] = mudar permissão de leitura para o grupo

chmod o+r [nome da pasta ou arquivo] = mudar permissão de leitura para outros
chmod o+w [nome da pasta ou arquivo] = mudar permissão de leitura para outros
chmod o+x [nome da pasta ou arquivo] = mudar permissão de leitura para outros

Se a forma de dar permissão for igual para todos pode ser utilizado apena um comando como abaixo.

chmod ugo+r = altera permissão de todos para leitura
chmod ugo+w = altera permissão de todos para gravação
chmod ugo+x = altera permissão de todos para execução
chmod ugo+rw = altera permissão de todos para leitura e gravação
chmod ugo+rx = altera permissão de todos para leitura e execução
chmod ugo+rwx = altera permissão de todos para leitura, gravação e execução

São muitas as possíbilidades mas dessa forma em alguns momentos teremos que utilizar mais que um comando para alterar permissões complexas como por exemplo:

Eu quero permissão total para um usuário em determinada pasta /eu, mas não quero que quem pertencer ao grupo deste usuário execute ou grave nesta pasta e que outros que não pertença ao grupo e que não seja o próprio usuário só possa ler e executar (abrir a pasta).

No formarto acima o comando ficaria assim:
chmod u+rwx eu aqui eu dou permissão total ao usuário
chmod g+r eu aqui eu dou permissão de somente leitura ao grupo
chmod o+rx eu aqui eu dou permissão de leitura e execução para outros

Note que precisamos de 3 comandos para resolver esta questão, agora vamos resolver esta questão na forma decimal, vou colocar detalhes para que entendam melhor, vamos lá:

A questão representada aqui seria assim:
d rwx r-- r-x aqui a questão representada na forma verbouse do sistema
d 111 100 101 aqui a questão representada na forma binária
d  7   4   5  aqui a questão representada na forma decimal

Então observe que com apenas um comando resolvemos a questão acima, assim:

chmod 745 eu (assim eu permito de uma só vez que o usuário tenha premissão total o grupo possa apenas ler e outros tenha permissão de leitura e gravação).

Um exemplo prático abaixo:

usuario@maquina:/home/familia# mkdir eu criamos um diretório
usuario@maquina:/home/familia# ls listamos o diretório criado
eu   diretório listado
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
drwxr-xr-x  2 root    root       4096 2010-09-30 12:36 eu diretório listado com suas permissões
usuario@maquina:/home/familia# chmod ugo+rwx eu alterando permissões de todos de uma só vez ao diretório
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
drwxrwxrwx  2 root    root       4096 2010-09-30 12:36 eu diretório listado com suas novas permissões
usuario@maquina:/home/familia# chmod ugo-rwx eu retirando todas permissões de uma só vez ao diretório
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
d---------  2 root    root       4096 2010-09-30 12:36 eu diretório listado sem suas permissões


Se quisermos colocar somente gravação para o usuário, leitura para o grupo e gravação para outros o comando fica assim:

usuario@maquina:/home/familia# chmod u-r eu dando permissão de leitura ao usuário
usuario@maquina:/home/familia# chmod g-w eu dando permissão de gravação ao grupo
usuario@maquina:/home/familia# chmod o-x eu dando permissão de execução para outros

Sim teremos que digitar três comandos para ficar assim no final:

usuario@maquina:/home/familia# chmod u+r eu dando permissão de leitura ao usuário
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
dr--------  2 root    root       4096 2010-09-30 12:36 eu diretório listado com suas novas permissões

usuario@maquina:/home/familia# chmod g+w eu dando permissão de gravação ao grupo
usuario@maquina:/home/familia# chmod o+x eu dando permissão de execução a outros
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
dr---w---x  2 root    root       4096 2010-09-30 12:36 eu diretório listado com suas permissões

Então se quiser alterar todos de uma vez só mesmo de forma complexa como esta permissão use a forma decimal assim:

Primeiro vamos tirar as permissões novamente assim:

usuario@maquina:/home/familia# chmod ugo-rwx eu retirando todas permissões de uma só vez ao diretório
usuario@maquina:/home/familia# ls -l listando diretório e suas permissões
d---------  2 root    root       4096 2010-09-30 12:36 eu diretório listado sem suas permissões

Agora vamos dar permissão de gravação para o usuário, execução para o grupo e leitura para outros onde teria que ficar

Assim: d -w- --x r-- o que em binário ficaria assim:
       d 010 001 100 e convertendo para decimal ficaria assim:
       d  2   1   4  então o comando já está pronto é só digitar chmod 214 eu
Vamos lá:

usuario@maquina:/home/familia# chmod 214 eu
usuario@maquina:/home/familia# ls -l
d-w---xr--  2 root    root       4096 2010-09-30 12:36 eu

Agora só depende da imaginação e qual método ou forma pretende utilizar, está é a forma básica de colocar e retirar permissões de acesso a pastas e arquivos, existe outras formas para tratar arquivos de sistemas, converter um simples arquivo em executável e vamos ver a seguir, ha! lembra do "d" ou "-" então existe forma de alterar isso para tornar um Arquivo comum em binário etc isso é mais na frente que falaremos.

Texto escrito por Wanderson
Baseado nas explicações do professor Fausto Andrade
Aluno do 2º semestre de redes da faculdade FAJESU
Este texto faz analogia a disciplina de SOFTWARE LIVRE
Responsável pela disciplina professor Fausto Andrade dos Santos Junior

Nenhum comentário:

Postar um comentário