quarta-feira, 28 de janeiro de 2009

Mais comandos chmod - 2ª Parte


Entendendo e usando permissões no Linux - Parte 2

Introdução

Nesta segunda parte sobre entendimento e uso de permissões no Linux, vamos trabalhar com os comandos umask, chown e chgrp. O primeiro comando permite manipular as permissões padrão do sistema, o segundo é usado para alterar o proprietário do arquivo ou diretório e por fim, o terceiro comando é utilizado para alterar o grupo no qual um arquivo/diretório pertence.

É extremamente recomendável que a primeira parte tenha sido lida. Isso porque os conceitos mostrados no primeiro artigo serão aplicados aqui.

Trabalhando com permissões padrão

Pode acontecer de você, por exemplo, criar arquivos com permissões de leitura e gravação para o proprietário e para um grupo usando chmod. Neste caso, você não permitiu nenhum acesso aos outros usuários do sistema. Mas muito provavelmente, essa não era sua intenção. Você percebe então que ao criar permissões em arquivos, as permissões padrão podem diferenciar. É aí que entra em cena o comando umask.

O umask (máscara de criação de arquivos) é responsável por controlar as permissões padrão dos arquivos. Mas há algo importante a citar em relação ao umask: quando este comando é usado, ele pode por exemplo, mostrar o valor 07. Neste caso, acrescenta-se um 0 à esquerda, transformando o valor em 007 (sempre que houve uma situação como essa, deve-se interpretar como se houvesse mais um zero à esquerda). Mas isso não significa que o arquivo em questão tenha sido criado sem nenhuma permissão para o proprietário e para o grupo e tenha sido dado permissões de leitura, gravação e execução para todos os demais. Na verdade, significa exatamente o contrário! Veja o porquê:

O umask é uma espécie de filtro pelo qual os arquivos passam para determinar quais permissões permanecem neles. Se o valor da permissão for verdadeiro, continua no arquivo, caso contrário, deverá sair. Observe o esquema abaixo para entender melhor:

Transforme a máscara (no nosso caso, o valor 007) para um valor binário:

007 - 000 000 111

Agora alinhe esse valor com o equivalente em binário para "todas as permissões dadas", ou seja, 777 (este valor é sempre usado neste tipo de operação) e faça uma adição:

777 - 111 111 111

Então,

000.000.111
====>
007
+ 111 111 111
====>
777
111.111.000

Repare no valor que saiu da adição. Quando há 0 + 1, o valor é 1. Quando há 1 + 1 o valor passa a ser 0 e não 2, pois no sistema binário somente existem os valores 0 e 1, não existem 2 ou outros números. Bom, com os valores do resultado da adição do equivalente binário para 007 e 777 em mãos, vamos agora transformá-los para o valor decimal:

111 111 000 = 770

Esse então passa a ser o valor da permissão padrão. Repare agora que o valor do umask é justamente o contrário do valor normal. Quando eu quero ter 770 como permissão padrão para um arquivo, devo então usar o valor 007, o oposto. Isso significa que o umask vai dar permissão padrão, ou seja, leitura, gravação e execução para o proprietário e para o grupo, mas nenhuma permissão para os demais. Veja, essa situação é exatamente o contrário de 007 se fosse usado chmod. Isso deixa claro que o umask sempre trabalhará com o valor oposto. Isso é de fato confuso. É necessário raciocinar bastante e praticar para ter um entendimento claro do umask e de sua utilidade. Por isso, crie alguns arquivos e teste, digitando por exemplo: % umask 077 e veja o que acontece com as permissões dos arquivos.

Veja agora este caso: ao trabalhar com 770 (máscara 007) com meus arquivos, por que alguns têm na realidade, valor 660? Simplesmente porque o Linux sabe que para alguns arquivos (como arquivos de texto, por exemplo) a permissão de execução não faz sentido. Assim, ele oculta esse permissão e dá ao arquivo com permissão 770 o valor 660, justamente porque não é necessário usar a permissão de execução. Mesmo assim, é sempre bom usar um valor com permissão de execução mesmo para arquivos de textos, pois pode haver um diretório no meio de tudo e para ele a permissão de execução é válida.

Vamos supor agora que você queira que a permissão padrão direcione os arquivos somente ao proprietário (ou seja, os outros usuários não têm acesso), e os deixe como leitura. Ou seja, você quer ter a permissão r-x------. Para usar o umask é necessário usar o valor contrário, que é -w-rwxrwx. Passando este valor para binário o resultado é 010 111 111 e passando para decimal, 277 (010 = 2, 111 = 7). Então, o comando que deve ser usado é: % umask 277.

Lembre-se de um detalhe importante: as permissões padrão são dadas aos arquivos e diretórios assim que criados. Sendo assim, para alterar permissões particulamente usa-se o comando chmod. Portanto, tome cuidado com o uso de umask.

Alterando a propriedade de um arquivo/diretório

Se você digitar em seu sistema o comando "ls -l" geralmente ele mostrará, entre outras informações, o proprietário do arquivo/diretório. Mas pode ser que você esteja trabalhando em conjunto com um colega e precisa que um arquivo de propriedade sua passe a ser dele. Para isso, pode ser necessário identificar o grupo no qual o arquivo pertence. Para isso, use o comando "ls -lg". Geralmente ele informará também o grupo.

O próximo passo agora é usar o comando chown para alterar o proprietário do arquivo. Mas antes de prosseguirmos esteja atento a este fato: se você alterou a permissão de um arquivo seu para um colega por exemplo, não poderá "tomar" o arquivo de volta. Somente seu colega, agora o dono do arquivo, poderá devolvê-lo a você.

O procedimento para alterar a propriedade de arquivo consiste em primeiro informar quem será o novo proprietário e então indicar o arquivo ou diretório. Por exemplo, vou transferir meu arquivo �redesconexao� para o usuário unixer. Se antes eu digitar "ls -l" ele mostrará a seguinte informação, mostrando que o arquivo é meu (sou o usuário wester):

% ls -l redesconexao
-rwxrwxrwx 1 wester

Agora sim vou transferir meu arquivo (redesconexao) para o usuário unixer, através do comando chown. Em seguida digito novamente "ls -l" para mostrar que o processo deu certo:

% chown unixer redesconexao
% ls -l redesconexao
-rwxrwxrwx 1 unixer

Atualmente, este comando pode não ser permitido aos usuários (somente ao root) por questões de segurança. Se você usar o chown e aparecer uma mensagem como "Permission Denied" ou "Comando Not Found" (acesso negado e comando não encontrado, respectivamente) é porque você se encaixa neste caso. Cabe então ao root permitir que você transfira seus arquivos.

Alterando o grupo de um arquivo/diretório

Também é possível alterar o grupo de um arquivo ou diretório. Isso é feito com o comando chgrp. Veja o exemplo abaixo:

% chgrp adm redesconexao

Acima, o arquivo redesconexao foi transferido para o grupo "adm". É importante citar que você deve ser membro do grupo do qual o arquivo pertencia antes para poder transferí-lo. Além disso, a mesma limitação que pode haver com o comando chown pode existir com o chgrp, ou seja, pode ser que, por uma questão de segurança, seu usuário não esteja autorizado a transferir de grupo um arquivo/diretório.


Nenhum comentário:

Postar um comentário