sábado, 3 de novembro de 2007

Permissões de Acesso em Linux

Nesta postagem será mostrado como funciona o sistema de permissões em Linux. O esquema de segurança de acesso vem de seus ancestrais Unix, sendo uma forma de evitar que usuários ou grupos tenham acesso indevido a arquivos, diretórios ou aplicativos.

Os tipos de arquivo mais conhecidos são os do tipo diretório e arquivo propriamente dito. Existem outros tipos de arquivo como archive, bloco, soquet etc. Mas nós falaremos apenas dos dois anteriores.

Os diretórios são representados por um 'd', enquanto os arquivos comuns são representados por um traço '-'.

Existem em Linux três níveis de acesso: leitura, gravação e execução. Eles são representados respectivamente pelas letras 'r' (Read), 'w' (Write) e 'x' (eXecute). Essas três letras podem formar até oito combinações diferentes. Cada combinação define o "poder de acesso" que um usuário ou grupo tem sobre um arquivo ou diretório.

Esses níveis de acesso são dados a três tipos de entidade: usuário, grupo, outros. Quando um administrador de sistema vai explicitar as permissões de um arquivo ele deve fornecer o nível de acesso para todas três entidades. Cada entidade vai receber uma combinação de r, w e x.

O comando que é usado para verificação das restrições e permissões dos arquivos de um diretório é: ls -l.

Já o comando que se usa para determinar restrições e permissões de acesso é o chmod, que significa change mode. Esse comando necessita de pelo menos dois argumentos: uma string que descreve o nível de acesso desejado e o nome do arquivo do qual se quer mudar as permissões.

Vejamos um exemplo de listagem de permissões. Foi dado um comando ls -l e o resultado foi o que está abaixo:

Permissões Itens Dono Grupo Tamanho Data Nome
-rwxr--r-- 1 josé cozinha 654 Sep7 12:00 receita_de_bolo.txt
-rw-rw-rw- 1 josé cozinha 245 Sep8 11:45 receita_de_macarronada.txt
drw-rw---- 5 josé cozinha 4895 Sep15 14:25 receitas_reunidas

Na primeira linha temos o seguinte para o arquivo "receita_de_bolo.txt":

  • -rwxr--r--: string que descreve o nível de acesso desejado para cada entidade usuária.
  • '-': O arquivo é do tipo arquivo comum;
  • 'rwx': O usuário dono tem acesso total ao arquivo de receita_de_bolo.txt para ler, escrever e executar(se possível);
  • 'r--': O grupo do dono tem acesso para apenas ler a receita de bolo;
  • 'r--': Os outros usuários têm acesso para apenas ler também.

Iremos nos deter um pouco na string de acesso. É importante saber o que cada caractere diz. O esquema da string é explicado abaixo:

Primeiro caractere (caractere 0):

  • Se for diretório, usa-se 'd';
  • Se for arquivo comum, usa-se '-'.
  • No caso acima trata-se de um arquivo comum, por isso foi usado um traço;

Primeiro grupo de tês caracteres (caracteres de 1 a 3):

  • Define as permissões do usuário dono do arquivo.
  • No caso acima: rwx (leitura, gravação e execução)

Segundo grupo de três caracteres (caracteres de 4 a 6):

  • Define as permissões do grupo de usuários que o dono faz parte.
  • No caso: r-- (somente leitura). As outras posições são preenchidas com traços.

Terceiro grupo de três caracteres (caracteres de 7 a 9):

  • Define as permissões para os todos os outros usuários.
  • No caso: r-- (também somente leitura). Preenchimento com traços para os espaços vasios.

Outros exemplos:

-rw-rw-rw- receita_de_macarronada.txt
  • -: O arquivo é um arquivo comum.
  • rw-: O usuário dono poderá ler e escrever, mas não poderá executar (pra quê?).
  • rw-: O grupo do dono também podera ler e escrever.
  • rw-: Qualquer outro usuário também poderá ler e escrever.

drw-rw---- receitas_reunidas

  • d: O arquivo é um diretório;
  • rw-: O usuário dono poderá ler e escrever, mas não poderá executar (pra quê?).
  • rw-: O grupo do dono também podera ler e escrever.
  • ---: Os outros usuários não poderão nem ao menos ler.

É possível atribuir acesso de duas maneiras. A mais simples na minha opinião é a que usa o conceito de adicionar e subtrair. Se você quer dar poder de escrita para um grupo de usuários por ,exemplo, o comando é este: chmode g+w receitas_reunidas. Se pelo contrário, você quiser tirar o acesso de gravação, basta dar um chmode g-w receitas_reunidas, com sinal de menos no meio de g e w. É importante agora decorar mais umas letrinhas:

  • u: usuário;
  • g: grupo;
  • o: outros;
  • a: todos;

Exemplos de configuração de permissão:

  • chmod u+x => dá ao usuário acesso a execução;
  • chmod u-w => tira do usuário o acesso a escrita;
  • chmod u-rwx => tira todo o acesso do usuário;
  • chmod g+rwx => dá acesso total ao grupo;
  • chmod ug+rwx => dá acesso total ao usuario e seu grupo;
  • chmod go-wx => tira acesso de escrita e execução do grupo e de outros usuários;
  • chmod a+rwx => libera acesso total para todo mundo.

Outra maneira de configurar acesso é utilizando números para simbolizar o nível de acesso de cada entidade usuária. Os níveis vão de 0 (proibição total) a 7 (permissão total). A tabela abaixo descreve cada nível numérico de acesso.

0 [ --- ] proibição total
1 [ --x ] apenas execução
2 [ -w- ] apenas Escrita
3 [ -wx ] escrita e execução
4 [ r-- ] apenas leitura
5 [ r-x ] leitura e execução
6 [ rw- ] leitura e escrita
7 [ rwx ] permissão total

O mesmo chmod é utilizado, com a diferença que não se precisa expecificar a entidade usuária. Como parâmetro é passado uma string de três números de 0 a 7. O primeiro número se refere ao usuário; o segundo, ao grupo; o terceiro aos outros usuários. Exemplos:

  • chmod 777 receitas_reunidas => dá acesso tota a todos os usuários;
  • chmod 700 receitas_reunidas => proíbe totalmente o acesso de outros que não sejam o dono;
  • chmod 660 receitas_reunidas => dá acesso de leitura e escrita para o dono e seu grupo;

Concluímos que não é difícil realizar operações que envolvam restrições de acessos de usuários. Tudo que é exigido do administrador é saber para que serve o chmod e lembrar de algumas letrinhas usadas como argumento para o mesmo.

Nenhum comentário:

Postar um comentário