sábado, 9 de maio de 2009

Propriedades e permissões dos arquivos no Linux

Para obter uma segurança no sistema, o Linux utiliza propriedades e permissões nos arquivos e diretórios. Este controle é usado para não permitir que um usuário leia ou modifique um arquivo de outro usuário. Um arquivo só poderá ser acessado por um usuário se ele for o proprietário ou se pertencer ao grupo em questão, e ainda terá que respeitar as permissões atribuídas no arquivo.

As propriedades e as permissões são mostradas quando se listam os arquivos usando o formato longo do comando ls (ls -l). Veja um exemplo:

# ls -l
drwxr-xr-x 2 usuario grupo 1024 Dec 7 16:39 nome_do_dir
-rwxrwxr-- 1 usuario grupo 29845 Dec 12 21:55 nome_do_arq1
lrwxrwxrwx 1 usuario grupo 12 Dec 9 01:33 nome_da_lig -> nome_do_arq2
-rw-r--r-- 1 usuario grupo 7563 Dec 2 22:30 nome_do_arq2
A primeira coluna da esquerda mostra o tipo e as permissões do arquivo em uma seqüencia de 10 caracteres, a terceira e quarta coluna mostram a qual usuário e grupo pertence o arquivo.

O tipo do arquivo é mostrado no primeiro caracter da seqüencia. Existem vários tipos de arquivos, mas os mais comuns são:

b -> dispositivo de blocos
c -> dispositivo de caracteres
d -> diretório
l -> ligação simbólica

Quando há um hífem em vez de uma letra, significa que é um arquivo normal.

As permissões são mostradas em uma seqüencia de 9 caracteres divididos em três níveis: usuário, grupo, outros. Existem três tipos de permissões, a permissão de leitura (read), a permissão de gravação (write) e a permissão de execução (execute). Em cada nível deverá ser especificada estas três permissões. Quando há um hífem em vez de uma letra, significa que não há permissão para acessar ao arquivo. Veja:

     /--------> O grupo pode ler e executar.
/ \
-rwxr-xr-x
\ / \ /
| \-----> Os outros usuários podem ler e executar.
|
\-----------> O proprietário pode ler, gravar e executar.


As permissões tem significados diferentes para arquivos e diretórios. Para um arquivo, a permissão de leitura significa que pode ser lido o conteúdo do arquivo, a permissão de gravação significa que o arquivo pode ser alterado ou apagado e a permissão de execução significa que o arquivo pode ser executado como um programa. Para os diretórios, a permissão de leitura significa que pode ser listado o seu conteúdo, a permissão de gravação significa que arquivos podem ser acrescentados ou removidos dentro do diretório e a permissão de execução significa que os arquivos podem ser lidos ou executados.

Existem ainda os atributos especiais, que são:

setuid -> Definido nos arquivos executáveis, faz com que seja executado com as permissões do proprietário daquele arquivo.

setgid -> Faz com que o arquivo seja executado com as permissões do grupo do arquivo, mesmo que o usuário não participe dele. Todo arquivo criado em um diretório setgid é criado com o mesmo grupo do diretório.

sticky -> Em diretórios compartilhados por vários usuários, faz com que um arquivo só possa ser apagado por seu proprietário.

Você poderá alterar as permissões dos arquivos e diretórios, além de alterar o proprietário e o grupo que o arquivo pertence. Os utilitários usados são, respectivamente: chmod, chown e chgrp.

O comando chmod pode ser usado de duas maneiras diferentes, o modo simbólico e o modo absoluto.

No modo simbólico o comando chmod tem a seguinte sintaxe:

chmod [ugoa][+-=][rwxXst] arquivo

u -> permissões para o proprietário.
g -> permissões para o grupo.
o -> permissões para outros usuários.
a -> permissões para todos: proprietário, grupo e outros.

+ -> adiciona a permissão às permissões existentes.
- -> remove a permissão das permissões existentes.
= -> define uma nova permissão, cancelando as existentes.

r -> permissão de leitura.
w -> permissão de gravação.
x -> permissão de execução.
X -> permissão de execução se for um diretório.
s -> setuid se for atribuído ao proprietário, setgid se atribuído ao grupo.
t -> sticky.

Exemplos:

# chmod u+x arquivo -> adiciona a permissão de execução para o proprietário do arquivo.
# chmod ug+rw arquivo -> adiciona a permissão de leitura e gravação para o proprietário e grupo.
# chmod u+wx,g-w,o=r arq -> adiciona a permissão de gravação e execução para o proprietário, retira a permissão de gravação para o grupo e atribui apenas a permissão de leitura para os outros usuários.

No modo absoluto o comando chmod usa a notação octal, com a seguinte sintaxe:

chmod [[e]ugo] arquivo

Onde se utiliza um número octal de três dígitos, com cada dígito correspondendo a um dos três níveis de permissão (usuário, grupo e outros), mais um quarto dígito opcional, que é o atributo especial. Cada dígito dos níveis de permissão é formado pela soma dos valores de cada tipo de permissão (leitura, gravação e execução), onde leitura tem o valor 4, gravação tem o valor 2 e execução 1. Veja abaixo:

0 -> nenhuma permissão.
1 -> permissão de execução.
2 -> permissão de gravação.
3 -> permissão de gravação e execução.
4 -> permissão de leitura.
5 -> permissão de leitura e execução.
6 -> permissão de leitura e gravação.
7 -> permissão de leitura, gravação e execução.

Para o atributo especial usa-se a soma dos valores de setuid, setgid e sticky, que também são 4, 2 e 1 respectivamente. Veja então os seguintes valores:

0 -> nenhum atributo especial ligado.
1 -> sticky ligado.
2 -> setgid ligado.
3 -> setgid e sticky ligados.
4 -> setuid ligado.
5 -> setuid e sticky ligados.
6 -> setuid e setgid ligados.
7 -> setuid, setgid e sticky ligados.

Exemplos:

# chmod 400 arquivo -> atribui apenas a permissão de leitura para o proprietário e nenhuma permissão para o grupo e outros usuários.
# chmod 750 diretório -> atribui permissão de leitura, gravação e execução para o proprietário, permissão de leitura e execução para o grupo e nenhuma permissão para os outros usuários.
# chmod 1777 arquivo -> liga o atributo sticky e atribui permissão de leitura, gravação e execução para todos os usuários.

O comando chown, usado para alterar o proprietário do arquivo ou diretório, só pode ser usado pelo administrador do sistema. Este comando também pode alterar o grupo. Ele tem a seguinte sintaxe:

chown usuário arquivo
chown usuário:grupo arquivo

Veja alguns exemplos:

# chown joao arquivo.ext -> define joao como proprietário do arquivo.ext.
# chown joao:familia arquivo -> define o arquivo como propriedade de joao e do grupo familia.
# chown -R joao:familia diretório -> altera as propriedades do diretório e seus conteúdos de maneira recursiva.

O comando chgrp, como já dito, altera o grupo que o arquivo pertence. E só pode ser usado pelo proprietário do arquivo ou pelo administrador do sistema. Veja a sintaxe:

chgrp grupo arquivo

Exemplo:

# chgrp familia arquivo.ext -> define o arquivo.ext como pertencente ao grupo familia.

Um comentário: