Permissões no Linux

Um assunto que merece destaque quando estudamos Linux são as permissões de arquivos e diretórios. Apresento-lhes o conceito, como visualizá-las e alterá-las pelo Terminal de Comando.

1) DEFINIÇÃO

Permissões são informações repassadas a arquivos e diretórios no Linux. Seu objetivo é controlar a forma como estes são manipulados por usuários e grupos de usuários.

2) NÍVEIS DE PERMISSÃO

No Linux as permissões estão divididas em três níveis:

a) Usuário: Normalmente é aquele que criou o arquivo ou diretório.

b) Grupo: Normalmente é o grupo do usuário que criou o arquivo ou diretório:

c) Outros: São os demais usuários que não estão relacionados aos níveis anteriores. Inicialmente são aqueles que não criaram o arquivo e nem fazem parte do grupo do usuário criador.

3) VISUALIZANDO AS PERMISSÕES

Para visualizar as permissões dos arquivos, digitamos no Terminal o comando “ls -l”, seguido pelo nome do arquivo.  Vamos a um exemplo:

# touch /tmp/a1

Criamos com o comando acima um arquivo chamado “a1”, dentro do diretório “/tmp”.

# ls -l /tmp/a1

Ao digitar o comando acima e apertar ENTER, uma saída será gerada, semelhante à apresentada a seguir:

-rw-r--r--    1    root    root   0   2011-04-22   08:41    a1

Vamos analisar e entender o primeiro bloco de símbolos ( -rw-r–r– ). São estes que representam as permissões. Para facilitar vamos desmembrar este bloco de símbolos em quatro partes:

–      rw-      r–        r–

|           |             |            |_____> permissões do nível “outros”
|           |             |__________> permissões do nível “grupo”
|           |_______________> permissões do nível “usuário”
|____________________> indicador de arquivo ( – ).

Separamos o primeiro caractere, pois ele serve apenas como indicador, informando se aquela estrutura é um arquivo ( – ), um diretório ( d ) ou um link simbólico ( l ). Depois dividimos a informação em grupos de 3 caracteres. Cada conjunto representa permissões concedidas para um determinado nível. Elas são representadas na seguinte ordem:

  • r: concedida permissão de leitura
  • w: concedida permissão de escrita
  • x: concedida permissão de execução

Vamos analisar as permissões do nível usuário (rw-). Concluímos por meio da informação que o dono do arquivo tem permissão de leitura (r) e tem permissão de escrita(w), mas não possui permissão de execução. Por isso que há um hífen ( – ) no lugar da permissão de execução ( x ), indicando a falta deste.

Agora analisaremos as permissões do nível “grupo” (r–). Concluímos que os demais usuários que fazem parte do grupo do usuário criador do arquivo possui somente permissões de leitura (r). Perceba que há dois hífens no lugar da permissão de escrita e execução.

Por fim analisaremos as permissões do nível “outros” (r–), indicados para todos os usuários que não são donos do arquivo e nem fazem parte do grupo deste. A permissão é igual à concedida para o nível “grupo”, ou seja, os outros usuários somente podem ler o arquivo.

Uma vez definidas as permissões, estas podem ser alteradas em qualquer momento pelo dono do arquivo/diretório ou pelo usuário “root”. Para isto é usado o comando “chmod”.

4) ALTERANDO AS PERMISSÕES

Há três formas de alterar as permissões:

a) Método diferencial

Indicamos as alterações pelo acréscimo ( + ) ou retirada ( – ) de permissões ( r, w ou x, para leitura, escrita e execução) para um nível especificado (u = nível “usuário”, g = nível “grupo”, o = nível “outros”).

Vamos apresentar novamente as permissões do arquivo “/tmp/a1”.

–    rw-    r–    r–

Ex1) O nível “grupo” ( g )  deve possuir permissão ( + ) de escrita  ( w ) no arquivo, digitamos o comando:

# chmod g+w /tmp/a1

Ex2) O nível “grupo” ( g )  e o nível “outros” ( o ) devem possuir permissões ( + ) de escrita  ( w ) no arquivo, digitamos o comando:

# chmod g+w, o+w /tmp/a1

Ex3) O nível “usuário” ( u )  não deve possuir permissão ( – ) de escrita  ( w ) no arquivo, digitamos o comando:

# chmod u-w /tmp/a1

b) método de atribuição direta

Todas as permissões para os níveis “usuário”, “grupo” e “outros” são definidas diretamente, sem indicar acréscimo ou decréscimo.

Ex1) O nível “usuário” ( u )  deve possuir permissão  de leitura e execução ( rx ) no arquivo. O nível “grupo” ( g ) e o nível “outros” ( o ) devem possuir  permissões de leitura, somente ( r ). Digitamos o comando:

# chmod u=rx, g=r, o=r /tmp/a1

c) método octal

Cada permissão é convertida em valor octal, da seguinte forma:

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

Para conhecer a permissão obtida, basta somarmos os valores de acordo com a nossa necessidade. Vamos refazer o exemplo anterior:

Ex1) O nível “usuário” ( u )  deve possuir permissão  de leitura e execução ( rx ) no arquivo. O nível “grupo” ( g ) e o nível “outros” ( o ) devem possuir  permissões de leitura, somente ( r ).

usuário deve possuir leitura e execução ( r = 4 e x = 1 ) => 4 + 1 = 5

grupo deve possuir somente leitura ( r = 4) => 4

outros devem possuir somente leitura ( r = 4) => 4

Assim o comando final é:

# chmod 544 /tmp/a1

5) PERMISSÕES ESPECIAIS

Sticky bit: Esta permissão é normalmente aplicada em diretórios. Previne o usuário de apagar ou renomear arquivos dentro destes diretórios, mesmo que ele possuia total permissão para isto. Sua função é garantir que somente o usuário ou “root” removam estes arquivos. Esta permissão é atribuída por padrão no diretório /tmp, por exemplo.

Para atribuir o stick bit basta acrescentar o valor “1” antes de se atribuir as permissões ao diretório.

Ex) Atribuindo stick bit ao diretório /tmp:

# chmod 1777 /tmp