Páginas

5 de jun. de 2009

Um pouco sobre permissões no Linux

O método de permissão de acesso no GNU/Linux visa proteger os arquivos do uso indevido por pessoas ou programas não autorizados. Temos que ter em mente o ambiente corporativo para compreender a necessidade das permissões, onde uma grande quantidade de pessoas estão acessando a rede, interna e externa, e os arquivos nela contidos e estes, sem as permissões adequadas, podem ser alterados ou excluídos e o que você está fazendo ou guardando, documentos sigilosos da empresa, projetos específicos de um departamento, etc, por exemplo, ficariam expostos. Portanto não devemos pensar apenas em nosso desktop de casa, que mesmo assim deve ser mantido em segurança porque normalmente está participando numa rede muito mais perigosa, a internet

O sistema GNU/Linux é multiusuário e multitarefa,significando isso que muitas pessoas podem acessar e trabalhar no mesmo computador simultaneamente. Esta facilidade revela a necessidade de um mecanismo de controle que permita aos usuários compartilhar e proteger arquivos quando necessário. A ferramenta adequada que se desenvolveu no ambiente Linux para isso são as permissões embutidas no sistema de arquivos .

Entender o sistema de permissão do GNU/linux não é muito simples, mas com um pouco de paciência e atenção compreende-se facilmente. Então vamos lá.

Basicamente, o método de permissões GNU/Linux determina que cada arquivo no sistema pertence a um usuário relacionado a um grupo e cada arquivo tem um conjunto de nove caracteres que controlam o acesso de leitura,escrita,execução. A coisa não para por aí,tem mais caracteres que poderíamos chamar de chaves lógicas,mas ficam pra outro artigo porque o assunto é um tanto complexo para ser abordado por completo num artigo deste tipo.

As permissões dos arquivos são especificadas por Dono, Grupo, Outros.

Dono > A pesssoa que criou o arquivo e que é o proprietário. O Dono tem permissão para alterar como quiser o arquivo,inclusive as permissões. É o mesmo usuário que entrou no sistema. Somente se aplicam ao dono do arquivo as permissões de acesso. A identificação do dono também é chamada de user id (UID). Digite no terminal/konsole o comando id e você terá a ID do usuário e o do grupo,o comando id sozinho retorna o usuário atual. Para saber mais sobre o comando id digite man id no terminal/konsole e veja as opções.
A identificação de usuário e o nome do grupo que pertence são armazenadas respectivamente nos arquivos /etc/passwd e /etc/group. Estes são arquivos textos comuns e podem ser editados em qualquer editor de texto, mas tenha cuidado.

Grupo > O recurso de grupo foi criado pela necessidade de permitir que vários usuários diferentes tivessem acesso a um mesmo arquivo, e não somente o dono do arquivo,isto é muito útil particularmente em ambiente de produção,corporativo e também na sua rede doméstica. Simplificando,diferentes arquivos de diferentes donos podem fazer parte de um mesmo grupo e cada usuário pode fazer parte de vários grupos,mas um arquivo somente pode fazer parte de um grupo por vez. A função central dos grupos é proporcionar um ambiente colaborativo.

Outros > Este tipo de usuário não é o dono do arquivo não é membro do grupo relacionado ao arquivo.

Os arquivos em um sistema Linux possuem trê chaves de permissões para cada atributo citado acima ( Dono ,Grupo ,Outros) fazendo um total de nove chaves, as permissões são definidas com um número gerado a partir de um número binário com equivalente em decimal, sendo na verdade uma notação octal, e ainda uma representação simbólica através de letras do alfabeto .

Forma simbólica:

r - Permissão de leitura (read)
w - Permissão de escrita (write)
x - Permissão de execução (execution)

Ex: rwx rwx rwx
Ex: rw- rw- rw-
Ex: rwx --- ---

Forma Binária:

Ex: 111 111 111
Ex: 110 110 110
Ex: 111 000 000

Forma Octal:

Ex: 7 7 7
Ex: 666
Ex: 700

Outro detalhe importante é que antes das permissões propriamente ditas ainda existe um caracter que identifica o tipo de arquivo, totalizando então dez caracteres e não apenas nove.
O sistema Linux representa tudo como arquivo, daí a necessidade de se dividir os arquivos em tipos específicos. Temos então os sete tipos de arquivos existentes no Linux. O primeiro caracter sempre vai identificar o tipo de arquivo.
São eles:

  • - arquivos comuns ( textos,dados,binários)
  • d Diretórios ( As pastas que contém outros arquivos)
  • c Dispositivos de caracteres (arquivos que representam dispositivos físicos -hardware- que podem ser acessados seqüencialmente, como portas paralelas e/ou seriais. Na verdade, são uma subdivisão dos device files -arquivos de dispositivos)
  • b Dispositivos de bloco (arquivos que representam dispositivos físicos que podem ser acessados em blocos de bytes, como o HD. Assim como os arquivos do tipo caractere, são uma subdivisão dos arquivos de dispositivos)
  • s Sockets (arquivos utilizados para comunicação entre processos)
  • l Links (arquivos que fazem referência a outros arquivos dentro do sistema de arquivos. São subdivididos em hard (diretos) e soft (simbólicos) links)
  • p Pipes (arquivos utilizados para a comunicação entre processos)
Em um terminal/konsole digite o comando abaixo para ter uma idéia de como fica a coisa na tela:
colossos@ub904jj:~/Desktop$
drwxr-xr-x 3 colossos colossos 4096 2009-06-16 18:50 .
drwxr-xr-x 126 colossos colossos 4096 2009-06-16 15:49 ..
drwxr-xr-x 3 colossos colossos 4096 2009-06-16 18:50 C
-rw-r--r-- 1 colossos colossos 36617 2009-04-24 14:59 machine-update

Observe que a letra de em drwxr-xr-x 2 colossos colossos 4096 2009-06-16 18:50 C nos mostra que é um diretório, depois vem as permissões,o 3 é a quantidade de arquivos dentro do diretório, o 4096 é o tamanho em bytes,data e hora de criação a alteração, por último o nome do arquivo.
O arquivo seguinte inicia com um - ,que mostar ser um arquivo comum. Então conformo arquivo muda outra letra será encontrada conforme as explicações acima

Para manipular as permissões em um sistema Linux geralmente usamos o terminal/konsole, pode ser feito pela interface gráfica mas isso complica mais do que ajuda. Então usaremos alguns comandos simples e fáceis de guardar. Antes porém é bom esclarecer que normalmente nos tutoriais disponíveis pela web ou em fóruns geralmente a notação usada para alterar as permissões será octal, por ser mais flexível. Com ela é possível especificar diretamente a permissão do Dono, Grupo, Outros ao invés de gerenciar as permissões de cada um separadamente. Para simplificar usaremos uma tabela .

1 = Permissão de execução (x)
2 = Permissão de escrita (w)
4 = Permissão de leitura (r)

E o restante dos números (0,3,5,6,7),afinal a notação é octal, ou seja um conjunto de oito números,de 1 até 8? É simples,basta somar.

Apenas permissão de execução use 1
Apenas permissão de escrita use 2
Apenas permissão de leitura use 4
Apenas permissão de execução/escrita, use 3 (equivale a 1+2 - Executar+Escrever)
Apenas permissão de leitura/execução, use 5 (equivale a 1+4 - Executar+Ler)
Apenas permissão de leitura/escrita, use 6 (equivale a 2+4 - Escrever+Ler)
Permissão de execução,escrita,leitura simultaneamente, use 7 (equivale a 1+2+4)
Nenhuma permissão, use 0 (zero)

Voltemos ao nosso exemplo do arquivo:
drwxr-xr-x 2 colossos colossos 4096 2009-06-16 18:50 C

É um diretório (letra d no início) o Dono tem permissão de leitura,escrita,execução sendo 4+2+1= 7 em octal, o Grupo tem permissão de leitura e execução(neste caso,executar é acessar o arquivo) sendo 4+1= 5 em octal, os Outros tem permissão de leitura e execução sendo também 4+1= 5 em octal. A notação completa em octal é 755.

O outro arquivo:
-rw-r--r-- 1 colossos colossos 36617 2009-04-24 14:59 machine-update

É um arquivo comum ( - no início) o Dono tem permissão de leitura e escrita 4+2= 6, o Grupo tem apenas permissão de leitura 4, os Outros tem igualmente apenas permissão de leitura 4. Em octal fica 644.

Com os exemplos ficou mais fácil entender certo? Basta memorizar o que significa 1,2,4 apenas , o restante é aritmética simples. Agora sim vamos alterar as permissões com os tais comandos simples. O primeiro deles é o:

chmod : Altera as permissões de acesso a arquivos e diretórios. Não altera as permissões de links simbólicos, mas as permissões dos arquivos que ele aponta. Sintaxe:

chmod [opções]

  • Opção Descrição
  • -c Exibe informações sobre os arquivos alterados.
  • -f Não imprime mensagens de erro.
  • -R Recursivo. Altera o modo de acesso de todos os arquivos e sub-diretórios abaixo do especificado.
  • -v Descreve, detalhadamente, as alterações de atributos.
O pode ser simbólico ou absoluto.

Modo simbólico:
lista de expressões com a sintaxe , separadas por vírgula.


u Usuário
g Grupo
o Outros
a Todos (all).


+ Adiciona permissões às existentes.
- Retira a permissão das existentes.
= Altera as permissões do arquivo para as especificadas.


r Permissão para leitura.
w Permissão para escrita.
x Permissão para execução.

Modo absoluto:
Definido com a sintaxe , onde o é opcional - se omitido, assume o valor 0 (zero,nenhum atributo ligado) por default. Não falarei sobre este atributo especial aqui.

0 Nenhuma permissão.
1 Permissão para execução.
2 Permissão para escrita.
3 Permissão para escrita e execução.
4 Permissão para leitura.
5 Permissão para leitura e execução.
6 Permissão para leitura e escrita.
7 Permissão para leitura, execução e escrita.

Exemplos:

$ chmod u+x arquivo.txt
Adiciona permissão de execução pelo dono ao arquivo

Exemplo de modo simbólico
$ chmod u+wx,g-w,o=r arquivo.txt
Adiciona permissão de escrita e execução para o dono, retira permissão de escrita para o grupo e, para os outros usuários permite apenas leitura

Exemplos do modo absoluto
$ chmod 750 script.sh
Permissão de leitura, escrita e execução para o dono, leitura e execução para o grupo e nenhuma permissão aos outros usuários.

$ chmod 744 script.sh
Permissão de leitura,escrita e execução para o dono,e apenas leitura para o grupo e os outros

Outro comando utilizado é o chown.

chown
: Muda o dono de um arquivo e o grupo de arquivos. Sintaxe:

chown [opções]

Opção Descrição
-c Exibe informações sobre os arquivos modificados.
-f Não imprime mensagens de erro.
-h Afeta os links simbólicos e não os arquivos referidos por ele
-R Recursivo. Muda o grupo de todos os arquivos e sub-diretórios abaixo do especificado.
-v Descreve, detalhadamente, as alterações de atributos.

Exemplos

$ chown fulano arquivo.txt

Altera o dono do arquivo.

$ chown fulano.developer arquivo.txt

Altera o dono e o grupo do arquivo.

O terceiro comando utilizado é o chgrp.

chgrp: Muda o grupo de um arquivo. Sintaxe

chgrp [opções]

Opção Descrição
-c Exibe informações sobre os arquivos modificados.
-f Não imprime mensagens de erro.
-h Afeta os links simbólicos e não os arquivos referidos por ele
-R Recursivo. Muda o grupo de todos os arquivos e subdiretórios abaixo do especificado.
-v Descreve, detalhadamente, as alterações de atributos.


Exemplos

$ chgrp developer web

Muda o grupo do arquivo developer para web.

A compreensão plena das permissões no sistema linux não fica somente nisso,faltou escrever sobre outros atributos como bit setuid,bit setgid,bit sticky,umask,atributo especial,mas fica pra outro artigo. Boa leitura.

Fontes consultadas:
Linux Guia Prático - Carlos Morimoto - Ed. Meridional - 2009
Comandos Linux - Roberto G. A. Veiga - Novatec - 2004
Bash - Joel Saade - Novatec - 2001
Shell Script Profissional - Aurelio M. Jargas - Novatec - 2008
Programação Shell Linux Julio Cezar Neves - Brasport - 5ª ed. 2005
FocaLinux
Viva o Linux
Wikipedia

Ubuntupedia

Nenhum comentário:

Postar um comentário