quarta-feira, 28 de janeiro de 2009

Mais comandos chmod - 1ª Parte


Entendendo e usando permissões no Linux - 1ª Parte

Introdução

As permissões são um dos aspectos mais importantes do Linux (na verdade, de todos os sistemas baseados em Unix). Elas são usadas para vários fins, mas servem principalmente para proteger o sistema e os arquivos dos usuários. Manipular as permissões é algo muito interessante, tanto quanto complexo. Mas tal complexidade não deve ser interpretada como dificuldade e sim como grande variedade de configurações, o que permite criar vários tipos de proteção de arquivos e diretórios.

Como você deve saber, somente o super-usuário (root) tem ações irrestritas no sistema, justamente por ser o usuário responsável pela configuração, administração e manutenção do Linux. Cabe a ele por exemplo, determinar o que cada usuário pode executar, criar, modificar, etc. Naturalmente, a forma usada para determinar o que o usuário pode fazer é a determinação de permissões. Este artigo visa explicar as configurações de permissões de arquivos e diretórios, assim como modificá-las.

Entendendo as permissões

drwx------ ... 2 wester ............. 512 Jan ... 29 23:30 .. Arquivos/
-rw-rw-r-- ... 1 wester ....... 280232 Dec .. 16 22:41... notas.txt

As linhas acima representam um comando digitado (ls -l) para listar um diretório e suas permissões. O primeiro item que aparece na linha (drwx----- e -rw-rw-r-) é a forma usada para mostrar as permissões que o diretório Arquivos e o arquivo notas.txt têm. É esse item, que recebe o nome de string, que vamos estudar. Um ponto interessante de citar é que o Linux trata todos os diretórios como arquivo também, portanto, as permissões se aplicam de igual forma para ambos. Tais permissões podem ser divididas em quatro partes para indicar: tipo, proprietário, grupo e outras permissões. O primeiro caractere da string indica o tipo de arquivo: se for "d" representa um diretório, se for "-" equivale a um arquivo. Entretanto, outros caracteres podem aparecer, já que existem outros tipos de arquivo no Linux, conforme mostra a tabela abaixo:

d => diretório
b => arquivo de bloco
c => arquivo especial de caractere
p => canal
s => socket
- => arquivo normal

Repare agora que no restante da string temos 9 caracteres. Você já sabe o que significa o primeiro. Os demais são em 3 grupos de 3, cada um representado o proprietário, o grupo e todos os demais respectivamente. Pegando a linha 2 do exemplo (-rw-rw-r-) e dividindo a string em 3 partes, ficaria assim:

-rw => indicação de permissões do proprietário
-rw => permissões do grupo que o usuário pertence
-r- => permissões para os demais usuários

Vamos entender agora o que significa esses caracteres (r, w, x, -). Existem 3 tipos básicos de permissões: leitura, gravação e execução. Leitura permite aos usuários ler o conteúdo do arquivo mas não altera-lo. Gravação permite que os usuários alterem o arquivo. Execução, como o nome diz, permite que o usuário execute o arquivo, no caso de ser executável. Mas acontece que as permissões não funcionam isoladamente, ou seja, ou o usuário tem permissão de leitura ou de gravação ou de execução. As permissões funcionam em conjunto. Isso quer dizer que cada arquivo/diretório tem as 3 permissões, cabendo ao dono determinar qual dessas permissões é habilitada para os usuários ou não. Pode ser que uma determinada quantidade de usuários tenha permissão para alterar um arquivo, mas outros não. Daí a necessidade de se usar grupos. Neste caso, a permissão de gravação desse arquivo será dada ao grupo e todo usuário membro dele poderá alterar o arquivo.

É necessário ter um certo cuidado com as permissões. Por exemplo, do que adianta o usuário ter permissão de gravação se ele não tem permissão de leitura habilitada? Ele poderá ler o arquivo para poder modifica-lo? Não! De certo, isso tem utilidade em arquivos de log. Fazendo associação com as letras r, w, x e o caractere -, vamos entender cada uma:

r => significa permissão de leitura (read);
w => significa permissão de gravação (write);
x => significa permissão de execução (execution);
- => significa permissão desabilitada.

A ordem em que as permissões devem aparecer é rwx. Sendo assim, vamos entender as strings do nosso exemplo, dividindo-a em 4 partes:

Linha 1:
drwx------ ... 2 wester ............... 512 Jan ... 29 23:30 .. Arquivos/

é um diretório (d);
o proprietário pode altera-lo, grava-lo e executa-lo (rwx);
o grupo não pode altera-lo, grava-lo e nem executa-lo (---);
os demais usuários não podem altera-lo, grava-lo e nem executa-lo (---).

Linha 2:
-rw-rw-r-- ... 1 wester .......... 280232 Dec .. 16 22:41... notas.txt

é um arquivo (-);
o proprietário pode altera-lo, grava-lo, mas não executável. Como este arquivo não é executável, a permissão de execução aparece desabilitada (rw-);
o grupo tem permissões idênticas ao proprietário (rw-);
o usuário somente tem permissão de ler o arquivo, não pode altera-lo (r--)

A tabela abaixo mostra as permissões mais comuns:

--- => nenhuma permissão;
r-- => permissão de leitura;
r-x => leitura e execução;
rw- => leitura e gravação;
rwx => leitura, gravação e execução.

Configurando permissões com chmod

Acima, você dever tido pelo menos uma noção do que são permissões e sua importância no Linux. Chegou a hora de aprender a configurar permissões e isso é feito através do comando chmod (de change mode). Um detalhe interessante deste comando é que você pode configurar permissões de duas maneiras: simbolicamente e numericamente. Primeiramente veremos o método simbólico.

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


As três últimas permissões da tabela são freqüentemente usadas para programas e diretórios.

Como você viu, é muito mais prático utilizar o chmod com método numérico. Mas você pode ter ficado confuso com todo esse esquema de permissão. No entanto, talvez isso não tenha sido por causa da minha possível ineficiência ao explicar permissões nesta coluna. A questão é que nos sistemas baseados em Unix, permissões são um dos aspectos mais complexos existentes. Tal complexidade é equivalente à eficiência do uso de permissões. Por isso, a melhor maneira de entender as permissões é treinando. Sendo assim, ao trabalho! Treine, crie permissões e veja seus resultados. Bom aprendizado!


Nenhum comentário:

Postar um comentário