| Entendendo e usando permissões no Linux da melhor maneira. |
|
|
|
| Escrito por Emerson Alecrim | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Dom, 26 de Dezembro de 2010 01:45 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
drwx------ ... 2 wester ............. 512 Jan ... 29 23:30 .. Arquivos/ As linhas acima representam um comando digitado (ls -l) para listar um diretório e suas permissões. O primeiro item que aparece em cada linha (drwx----- e -rw-rw-r-) é a forma usada para mostrar as permissões do diretório Arquivos e do arquivo notas.txt. É 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 arquivos 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 para indicar outros tipos de arquivos, conforme mostra a tabela abaixo: d => diretório Repare agora que no restante da string ainda há 9 caracteres. Você já sabe o que significa o primeiro. Os demais são divididos em três grupos de três, cada um representado o proprietário, o grupo e todos os demais, respectivamente. Tomando a linha 2 do exemplo (-rw-rw-r-), desconsiderando o primeiro caractere e dividindo a string restante em 3 partes, ficaria assim: rw- => a primeira parte significa permissões do proprietário Vamos entender agora o que significa esses caracteres (r, w, x, -). Há, basicamente, três tipos de permissões: leitura,gravação e execução. Leitura permite ao usuário ler o conteúdo do arquivo mas não alterá-lo. Gravação permite que o usuário altere 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, de forma que o usuário tenha ou 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 três permissões definidas, 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, por exemplo. Daí a necessidade de se usar grupos. No caso, a permissão de gravação desse arquivo será dada ao grupo, fazendo com que todo usuário membro dele possa alterar o arquivo. Note que é necessário ter 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? Agora que já sabemos o significado das divisões da string, vamos entender o que as letras r, w, x e o caractere -representam: r => significa permissão de leitura (read); A ordem em que as permissões devem aparecer é rwx. Sendo assim, vamos entender a string do nosso exemplo dividindo-a em 4 partes: Linha 1: - é um diretório (d); Linha 2: - é um arquivo (-); A tabela abaixo mostra as permissões mais comuns: --- => nenhuma permissão; Nos tópicos anteriores você dever tido pelo menos uma noção do que são permissões e de 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 desse 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 Lista 2 Para poder combinar os símbolos destas duas listas, usam-se os operadores: + (sinal de adição) => adicionar permissão Para mostrar como essa combinação é feita, vamos supor que você deseje adicionar permissão de gravação no arquivoteste.old para um usuário. O comando a ser digitado é: 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 uma 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 gravaçã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. Em seguida, teste a combinação de permissões com chmod. Isso lhe ajudará muito no entendimento deste recurso. Usar o chmod com valores numéricos é uma tarefa bastante prática. 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 o valor 0. Sendo assim, a string de permissões r-xr----- na forma numérica fica sendo 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: 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 cotidiano), ele precisa de uma sequê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 que, com o método numérico, usamos somente um dígito para representar uma permissão, em vez de três. Assim sendo, 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 para ver o que aparece (notas.txt deve ser substituído pelo arquivo que você está usando). A tabela abaixo mostra uma lista de configurações bastante utilizadas: As três últimas permissões da tabela são comumente usadas para programas e diretórios. Como você viu, é muito mais prático utilizar o chmod com o método numérico. Mas você pode ter ficado confuso com todo esse esquema de permissão. Mas não se sinta culpado por isso (e também não ponha toda a culpa na ineficiência do autor para explicar o assunto :D ). 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. Boa aprendizagem!
Entendendo e usando permissões no Linux
|
| 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
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
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
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
Note na imagem anterior que o arquivo em questão pertence ao grupo terra. Em seguida, foi transferido para o grupoinfowester. 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 Emerson Alecrim - Publicado em 08/02/2004 - Atualizado em 06/02/2010




