31 de julho de 2008

Permissões de Arquivos


Introdução
Tudo no Linux é um arquivo. Diferentemente de outros sistemas operacionais e assim como o Unix, o Linux trata todas as partes do sistema como arquivos, como, por exemplo, dispositivos de hardware, que são acessados por meio de arquivos que os representam e até mesmo a comunicação entre processos (programas em execução) se dá através de arquivos.

Genericamente, os sistemas de arquivos suportados pelo Linux mantém, associados a cada arquivo, informações como identificadores do dono do arquivo, grupo do dono, o tipo do arquivo, as permissões relativas ao arquivo, data e hora de criação e última modificação etc.

Permissões
Segundo [1], permissão é o ato de dar liberdade, poder ou licença para; consentir; autorizar a fazer uso de; não obstar; tolerar. Esta é justamente a intenção das permissões dos arquivos no sistema: limitar o acesso aos arquivos, de acordo com a importância dos mesmos e com o desejo do seu dono, de forma a manter a segurança e integridade do sistema.

Como já foi dito, cada arquivo possui, associado a ele, um conjunto de atributos e um deles são as permissões relativas a ele próprio. Estas permissões podem ser entendidas como um número de 12 bits onde, obviamente, cada bit pode variar entre zero e um, indicando a ausência ou presença de uma permissão específica (ao longo do artigo será mostrado que as permissões se subdividem em grupos e cada bit representa um tipo de permissão específico).
Figura 1. Permissões podem ser entendidas como um número de 12 bits.

A primeira divisão que pode ser feita neste número de 12 bits, separa 3 bits para determinar os atributos do arquivo, que será abordado mais a frente, e o restante (9 bits) para a determinação da proteção do arquivo.
Figura 2. Permissões se subdividem em bits de atributos e de proteção.

Bits de Atributo
Os bits de atributo definem um controle adicional às permissões de proteção do arquivo [2].

Os atributos de um arquivo são três e cada um deles desempenha uma função bem específica. O primeiro é conhecido como bit setuid, que, se estiver ativado (valor igual a 1), faz com que o arquivo seja executado como se o fosse pelo seu dono (não faz sentido para diretórios) [2].

O segundo atributo é o bit setgid, que, se estiver ativado, faz com que o arquivo seja executado como se o fosse por um membro do grupo do seu dono (todo arquivo criado em um diretório com o bit setgid ativado, é criado com o mesmo grupo do diretório) [2].

Por fim, o terceiro atributo é conhecido como bit sticky e, se estiver ativado, faz com que o arquivo possa ser apagado apenas pelo seu dono [2]. Um grande exemplo da utilização deste bit de atributo está no diretório /tmp, onde todos os usuários cadastrados no sistema podem utilizar o diretório livremente. Contudo, nenhum usuário pode apagá-lo, visto que ele pertence ao superusuário (root) e possui o seu bit sticky ativado. Sendo assim, pode ser apagado apenas pelo usuário root.

Desta maneira, pode-se reescrever os bits de atributo com sua notação simbólica, onde, da esquerda para a direita, os bits podem substituídos por letras que os simbolizam. O primeiro bit pode ser substituído por um S, que simboliza o bit setuid, o segundo bit pode ser substituído por outro S, que simboliza o bit setgid e o terceiro bit, por um T, que simboliza o bit sticky, assim como mostrado na figura 3.
Figura 3. Outra forma de se visualizar os bits de atributos.

Bits de Proteção
Os bits de proteção definem as proteções básicas de cada arquivo (leitura – read –, escrita – write – e execução – execution). A ativação, ou não, de cada um destes bits define quem pode visualizar (ler) o arquivo, quem pode alterá-lo/apagá-lo (escrever) e/ou executá-lo (executar).

Assim como os bits de atributo, há uma subdivisão destes bits em três grupos de três bits cada: o que define as permissões para o dono do arquivo (primeiros três bits, da esquerda para a direita), as permissões para os membros do mesmo grupo do dono do arquivo (os três bits da sequência) e as permissões para os outros usuários do sistema (últimos três bits). Isto pode ser facilmente visualizado na figura 4.
Figura 4. Divisão dos bits de proteção.

Cada bit, de cada subdivisão, determina se o usuário que a subdivisão representa pode ler, escrever ou executar o arquivo. Sendo assim, pode-se utilizar as letras r (leitura), w (escrita) e x (execução) para representar, simbolicamente estes bits, como na figura 5.
Figura 5. Notação simbólica dos bits de proteção.

Deste modo pode-se perfeitamente definir o que cada tipo de usuário pode fazer com o arquivo.

Conclusão
As permissões de arquivos são um grande trunfo do sistema operacional para manter a segurança. Apesar de parecer complicado, o seu entendimento é relativamente simples e é crucial para usuários que querem entender mais sobre o sistema que utilizam. Um detalhe bastante interessante e motivador é que o "primo do Linux", o OS X da Apple, sistema operacional usado nos Macintoshes, utiliza os mesmos conceitos aqui apresentados. Sendo assim uma motivação a mais para o aprendizado desta teoria.


[1] Rocha, R. (1995) "Minidicionário Ruth Rocha", 1ª edição, Editora Scipione.
[2] Ferreira, R. E. (2003) "Linux, Guia do Administrador do Sistema", 1ª edição, Editora Novatec.

Série Completa

Nenhum comentário:

Postar um comentário