sábado, 4 de agosto de 2007

Entendendo as permissões de arquivos do Linux

Permissões sempre são uma dor de cabeça para quem ainda não a domina totalmente.

Já passei muita raiva para configurar ftps, sambas, apaches, softwares e outras coisas sem saber utilizar corretamente as permissões.

Para visualizarmos as permissões utilizamos o comando: ls -l
Ex:
[vitor@house ~]$ ls -l
drwxrwxr-x 2 vitor vitor 4096 May 29 10:08 atualiz
-rw-r--r-- 1 root root 150160346 Dec 14 2006 Backup-14-12.tgz
-rw-r--r-- 1 vitor vitor 297048461 Feb 27 00:45 Backup.tgz

As permissões são: Leitura(r), Escrita(w) e Execução(x)

Estas permissões quando aplicadas a um diretório, a permissão de Leitura libera a listagem dos arquivos, a permissão de Escrita se refere a criação e exclusão de arquivos. A Execução se aplica ao acesso ao diretório.

Elas são distribuídas da seguinte forma: _rwxrwxrwx
São divididas em quatro partes, a primeira, que é o primeiro caracter se refere ao tipo de arquivo:
d = diretório
b = arquivo de bloco
c = arquivo especial de caractere
p = canal
s = socket
- = arquivo normal
l = link

A segunda parte que são os três próximos caracteres se referem às permissões do dono do arquivo(rwx), a terceira são as permissões do grupo do arquivo (normalmente é o grupo do usuario que criou o arquivo) e a quarta e última se refere aos demais usuários do sistema.

Exemplos:
-rwxrwxrwx vitor testes = todos os usuários do sistema tem permissão total para manipular este arquivo
-rwxr-xr-- vitor testes = apenas o vitor pode alterá-lo ou excluí-lo ler executar, os usuarios do grupo testes podem apenas ler e executar e os demais usuários podem apenas ler.
drwxr-xr-x vitor testes = o vitor pode entrar, listar e alterar, os usuarios do grupo testes podem apenas entrar e listar, e os demais usuários também apenas entram e listam.

Para alterar uma permissão utilizamos o comando: "chmod", para alterar o dono do arquivo ou o grupo do arquivo utilizamos o comando: "chown" e para alterar o grupo utilizamos: "chgrp".

Infowester: "Para ter uma visão mais clara da forma simbólica com o chmod, imagine que tais símbolos se encontram em duas listas, e a combinação deles gera a permissão:

Lista 1
Símbolo
u => usuário
g => grupo
O (letra o maiúscula) => outro
a => totos

Lista 2
Símbolo
r => leitura
w => gravação
x => execução

Para poder combinar os símbolos destas duas listas, usam-se os operadores:

+ (sinal de adição) => adicionar permissão
- (sinal de subtração) => remover permissão
= (sinal de igualdade) => definir permissão"

Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivo teste.old para um usuário. Então o comando a ser digitado será:

chmod u+w teste.old

O "u" indica que a permissão será dada a um usuário, o sinal de adição (+) indica que está sendo adicionada a permissão e "w" indica que a permissão que está sendo dada é de gravação.

Caso você queira dar permissões de leitura e execução ao seu grupo, o comando será:

chmod g+rw teste.old

Agora, vamos supor que o arquivo teste.old deverá estar com todas as permissões disponíveis para o grupo. Podemos usar então:

chmod g=rwx teste.old

Dica: crie arquivos e diretórios e teste a combinação de permissões com chmod. Isso lhe ajudará muito no entendimento deste conceito.

Usando chmod com o método numérico

Usar o chmod com valores numéricos é algo bastante prático. Em vez de usar letras como símbolos para cada permissão, usam-se números. Se determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se valor 0. Sendo assim, a string de permissões r-xr----- na forma numérica fica 101100000. Essa combinação de 1 e 0 é um número binário. Mas temos ainda que acrescentar a forma decimal (ou seja, números de 0 a 9). Para isso, observe a tabela abaixo:


Permissão Binário Decimal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7

Se você não conhece o sistema binário deve estar se perguntando o que esse "monte" de 0 e 1 tem a ver com os números de 0 a 7. Como o sistema binário somente trabalha com os números 0 e 1 (decimal trabalha com os números de 0 a 9, ou seja, é o sistema de numeração que utilizamos no nosso dia-a-dia), ele precisa de uma seqüência para representar os valores. Sendo assim, na tabela acima, a coluna Binário mostra como são os valores binários dos números de 0 a 7 do sistema decimal.

Chegou a hora então de relacionar a explicação do parágrafo acima com a coluna Permissão. Para exemplificar, vamos utilizar a permissão rw-, cujo valor em binário é 110, que por sua vez, em decimal corresponde ao número 6. Então, em vez de usar rw- ou 110 para criar a permissão, simplesmente usa-se o número 6. Repare então que com o método numérico, usamos somente um dígito para representar uma permissão, ao invés de três. Com isso a string de permissões r--r--r-- pode ser representa por 444, pois r-- em decimal é igual a quatro. Observe o exemplo abaixo:

chmod 600 notas.txt

Acima, estão sendo dadas as permissões rw------- ao arquivo notas.txt, pois 6 equivale a rw- e 0 equivale a ---. Como zero aparece duas vezes, forma-se então o valor 600. Faça o comando acima com um arquivo de teste e depois digite ls- l notas.txt e veja o que aparece (notas.txt deve ser substituído pelo arquivo que você está usando para teste). A tabela abaixo mostra as configurações de permissões mais usadas:


--------- 000
r-------- 400
r--r--r-- 444
rw------- 600
rw-r--r-- 644
rw-rw-r-- 666
rwx------ 700
rwxr-x--- 750
rwxr-xr-x 755
rwxrwxrwx 777

(Infowester, 2007. LINK)

Fontes: Infowester, Devin, JulioBattisti

Nenhum comentário: