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 (default) do sistema, o segundo é usado para alterar o proprietário do arquivo ou diretório e, por fim, o terceiro é utilizado para mudar o grupo no qual um arquivo/diretório pertence.

Para você entender esses recursos, é extremamente importante que a primeira parte deste assunto tenha sido lida. Isso porque os conceitos mostrados no primeiro artigo serão aplicados aqui. Vamos lá?


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ê pode não ter permitido 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 a esse comando: quando esta instrução é utilizada, ela pode, por exemplo, mostrar o valor 07. Neste caso, acrescenta-se um 0 à esquerda, transformando o valor em 007 (sempre que houver 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 dada permissões de leitura, gravação e execução para todos os demais. Na verdade, significa exatamente o contrário! Vejamos o porquê:

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

Vamos transformar a máscara (no nosso caso, o valor 007) em um valor binário:

007 => 000 000 111

Agora vamos alinhar 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 fazer uma adição:

777 => 111 111 111

Então,

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

Repare no valor que resultou 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 há 2 ou outros números). Com os valores do resultado da adição do equivalente binário para 007 e 777 em mãos, vamos agora transformá-los em um 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, ou seja, quando alguém quer, por exemplo, ter 770 como permissão padrão para um arquivo, deve 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 pode, de fato, parecer confuso, por isso é necessário raciocinar e praticar bastante para ter um entendimento claro do umask e de sua utilidade. Por isso, vamos exercitar: crie um diretório qualquer, por exemplo, iw, e digite:

umask 027 iw

Esse comando faz com que, por padrão, os arquivos criados dentro do diretório iw tenham permissão total para o dono do arquivo, apenas permissão de leitura e execução para o grupo, e nenhuma permissão para os demais. Basta criar um arquivo qualquer dentro desse diretório e digitar "ls -l nome do arquivo" para ver que as permissões padrão são justamente essas, observe:

Aplicando umask no diretório iw
Aplicando umask no diretório iw

Note que o arquivo não tem permissão de execução para o proprietário e para o grupo porque não é um arquivo executável. Veja este caso para entender melhor: ao trabalhar com 770 (máscara 007) com determinados arquivos, por que alguns têm, na realidade, valor 660? Simplesmente porque o sistema sabe que para alguns arquivos a permissão de execução não faz sentido. Assim, ele oculta essa permissão e dá ao arquivo com permissão 770 o valor 660. Mesmo assim, é recomendável 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 este caso, 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 (isto é, 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 particularmente usa-se o comando chmod.


Alterando a propriedade de um arquivo/diretório

Como você já deve saber, todo arquivo ou diretório no Linux tem um dono e um grupo. E se você precisar, por algum motivo, transferir a "posse" desse arquivo/diretório para outro usuário? Fazer isso é muito fácil! Para facilitar a compreensão, vamos fazer o seguinte: transferir o arquivo guia.txt do usuário arthur para o usuário marvin. Para isso, faremos uso do comando chown. Mas, antes de prosseguirmos, esteja atento ao seguinte detalhe: se você "transferir" a propriedade de um arquivo seu para um colega de trabalho, por exemplo, não poderá "tomar" o arquivo de volta. Somente seu colega, agora 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. Antes de executar esse passo, vamos digitar o comando "ls -l guia.txt" para comprovarmos que, de fato, arthur é o dono atual do documento:

Checando a propriedade do arquivo
Checando a propriedade do arquivo

Agora, vamos executar o procedimento de transferência de propriedade de guia.txt para o usuário marvin por meio do comando chown. Em seguida, vamos digitar novamente "ls -l guia.txt" para mostrar que o processo foi bem sucedido:

chown marvin guia.txt
ls -l guia.txt

Transferindo a propriedade do arquivo para outro usuário
Transferindo a propriedade do arquivo para outro usuário

Em muitos casos, esse 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 um aviso de "Permission Denied" ou "Command Not Found" ou equivalente, é porque provavelmente seu usuário se encaixa neste caso. Cabe então ao root permitir a transferência de propriedade dos arquivos. Para isso, você pode utilizar o comando sudo seguido da instrução de transferência. Em poucas palavras, o sudo é uma espécie de lista de autorização para que o seu e outros usuários possam executar tarefas de poder administrativo. Se seu usuário tiver autorização para isso, o sudo pedirá que você informe sua senha na primeira vez que o comando for utilizado. Note que, na imagem anterior, o comando sudo foi utilizado, ficando da seguinte forma:

sudo chown marvin guia.txt

 

Alterando o grupo de um arquivo/diretório

Também é possível alterar o grupo de um arquivo ou diretório. Para isso, pode ser necessário identificar o grupo no qual o arquivo pertence. Tal procedimento pode ser feito com o comando "ls -lg nome do arquivo/diretório". Veja o caso do nosso arquivo de exemplo guia.txt:

Alterando o grupo de um arquivo
Alterando o grupo de um arquivo

Note na imagem anterior que o arquivo em questão pertence ao grupo terra. Em seguida, foi transferido para o grupo infowester. Neste caso, o comando utilizado foi chgrp. Basta digitar esse comando seguido do nome do novo grupo mais o nome do arquivo. Veja como fica em nosso caso (repare que, novamente, o comando sudo é utilizado):

chgrp infowester guia.txt

Acima, o arquivo guia.txt foi transferido com sucesso para o grupo infowester. É importante citar que você deve ser membro do grupo do qual o arquivo pertencia para poder transferí-lo.



Finalizando

Uma das características que tornam sistemas operacionais baseados no Unix tão seguros é o leque de possibilidades de permissões. Todo arquivo e diretório precisa ter um dono, assim como necessita ter configurações de permissões para informar o que outros usuários e grupos podem ou não fazer. Perceba então que, sabendo configurar permissões, é possível manter o sistema e suas funcionalidades bastante seguras. Por isso, a dica final é: pratique e explore as possibilidades de cada comando.

Lembrando que a primeira parte deste artigo sobre permissões pode ser acessada aqui.

Escrito por - Publicado em 08_02_2004 - Atualizado em 06_02_2010