Entendendo o funcionamento das permissões de arquivos no Linux

chmod
Share
banner
Uma das coisas mais interessantes no Linux (e que muitos acham complicado) é o permissionamento de arquivos. O Linux, assim como o Unix, usa alguns parâmetros para definir quem pode ler determinado arquivo, quem pode executar determinado arquivo/aplicação, quem pode acessar determinado diretório e etc, tudo isso através de parâmetros de permissão aplicados via linha de comando.

Abaixo, vamos explicar um pouco sobre estas permissões, como aplicá-las e quais comandos devemos usar para tal. Mas antes, beba um copo d’água que o artigo é comprido.  =)

Os modos de permissão no Unix

Quando executamos o comando “ls -l /” nos são mostrados todos diretórios e arquivos na raiz do sistema, é fácil identificar nessas listagens o nome, tamanho, data e dono dos diretórios e arquivos, mas temos que observar estes 10 caracteres do inicio das linhas que aparecem assim:

# ls -l /
3 drwxr-xr-x   2 root root 3072 2008-01-29 10:13 bin
0 lrwxrwxrwx   1 root root 1024 2008-01-28 08:54 cdrom->media/cdrom

Observando, temos 3 classes de usuários que podem ter acesso aos arquivos:

  • o dono (a pessoa que criou o arquivo),
  • o grupo (usuários que são agrupados pelo administrador do sistema),
  • e os outros (todos os usuários conectados a rede).

Os 10 primeiros caracteres das linhas listadas acimas pelo “ls -l” definem precisamente o que os usuários de cada classe podem fazer com seus arquivos. Esses caracteres são chamados de modos de permissão dos arquivos e se dividem em 4 grupos com 1, 3, 3 e 3 caracteres:

      [1]    [r][w][x]    [r][w][x]    [r][w][x]
       |         |            |            |
      tipo     dono         grupo        outros

O primeiro caracter define o tipo de arquivo que pode ser:

  • “-” : significa um arquivo normal.
  • “d” : significa um diretório.
  • “l” : significa um ‘link’ simbólico.

Há outras possibilidades raramente utilizadas que são “b”, “c”, “p” ou “s”.

Os outros 9 caracteres devem ser separados em 3 grupos de 3 caracteres como o exemplo acima, sendo:

  • o primeiro as permissões do dono do arquivo.
  • o segundo as permissões do grupo de usuários.
  • o terceiro as permissões de todos os outros usuários.

Em cada grupo, as permissões sempre aparecem na ordem:

  • r = leitura.
  • w = escrita-execução-deleção.
  • x = execução.

OBS: A permissão de leitura é sempre indicada com um “r”. A permissão de escrita é sempre indicada com um “w”. A permissão de execução é sempre indicada com um “x”. Permissão negada é indicada com um “-“.

Exemplo:

# ls -l /
3 drwxr-xr-x 2 root root 3072 2008-01-29 10:13 bin
0 lrwxrwxrwx 1 root root 1024 2008-01-28 08:54 cdrom->media/cdrom

Observando o diretório “bin” temos as permissões drwxr-xr-x , que podemos interpretar como:

  • tipo = d (diretório)
  • dono = rwx (permissão total)
  • grupo = r-x (permissão de leitura e execução, não pode gravar nem deletar)
  • outros = r-x (permissão de leitura e execução, não pode gravar nem deletar)

OBS: Caso o tipo seja igual á “-” significa que é um arquivo comum.

O comando chmod

chmod – altera permissõesLembre que somente quem tem permissão no arquivo ou diretório poderá alterar as permissões, quando ocorrer erros, verifique seus direitos sobre o arquivo ou diretório com o comando “ls -l” ou faça com poderes de root.

Vamos aprender de modo simples a usar as permissões que muitas vezes é bastante complicado.

Tendo em mente que o conceito de binário significa 0 = desligado e 1 = ligado, vejamos como fica na tabela abaixo:

     rwx
 0 - 000
 1 - 001
 2 - 010
 3 - 011
 4 - 100
 5 - 101
 6 - 110
 7 - 111

Onde “rwx” são as permissões de um arquivo, ou seja:

  • r=read (leitura)
  • w=write (gravação, alteração, deleção)
  • x=execute (execução)

Feito isso, sabemos que um arquivo ou diretório possui 3 modos de permissão. Uma permissão para o DONO do arquivo ou seja, quem o criou, uma outra permissão para o GRUPO do usuário dono do arquivo, e outra permissão para QUALQUER outro usuário ou grupo.

Sabendo disso, temos a tabela final abaixo:

    dono grupo outros
     rwx   rwx   rwx
 0 - 000   000   000
 1 - 001   001   001
 2 - 010   010   010
 3 - 011   011   011
 4 - 100   100   100
 5 - 101   101   101
 6 - 110   110   110
 7 - 111   111   111

Exemplo: Temos um diretório qualquer chamado mp3 que eu quero permissão total para o dono [eu], permissão de apenas leitura para o meu grupo e nenhuma permissão para o resto do mundo. O comando para executar essa ação é o CHMOD (em minúsculo mesmo).

$ chmod 740 /mp3

(acompanhem na tabela acima, que o 7=rwx, 4=r e 0=nada)

Porém, neste exemplo eu apliquei a permissão somente ao diretório, e não a todo o conteúdo dele. Para que todo o conteúdo, incluindo sub-diretórios, tenham a permissão que estou aplicando, usaremos o argumento recursivo:

$ chmod -R 740 /mp3

Lembra do “r”, “w” e do “x” falado acima? Também posso usar o chmod para aplicar permissões diretas a um arquivo ou diretório. Neste caso usaremos as letras:

$ chmod +x arquivo

Permite que ele seja executado por qualquer usuário

$ chmod +w arquivo

Permite que qualquer usuário possa escrever neste arquivo

$ chmod +rw arquivo

Permite que qualquer usuário possa ler e escrever neste arquivo

$ chmod -w arquivo

Desabilita a possibilidade de escrita no arquivo

E por ai vai…

Para mais informações, consulte a página de manual do comando chmod, abrindo um terminal e digitando

man chmod

O comando chown

chown – altera o dono e o grupo de um arquivo

A sintaxe básica do chown é a seguinte:

chown dono:grupo [arquivo ou diretório]

Vamos entender isso: eu tenho um arquivo chamado teste.txt que, ao executar o ls -l, percebo que o dono é o usuário aluno e o grupo é classe. Caso eu queira mudar o grupo do arquivo teste.txt de classe para admin, executaria o chown assim:

chown aluno:admin teste.txt

Viram? E se eu quisesse alterar o dono e o grupo do teste.txt para o root (dono root e grupo root)? Faria assim:

chown root:root teste.txt

ou simplesmente…

chown root: teste.txt

E se quiséssemos alterar o dono/grupo de um diretório? Podemos? Sim, claro. Porém devemos atentar que, se este diretório possuir sub-diretórios e eu quiser alterar o dono/grupo de tudo que está lá dentro, devo usar o argumento recurssivo, assim

chown -R root: pasta/

Para maiores informações, consulte a página de manual do comando chown, abrindo um terminal e digitando:

man chown

PUBLICIDADE


Quer continuar por dentro das novidades do Blog Seja Livre? Siga o nosso perfil no TWITTER, curta a nossa página no FACEBOOK ou adicione o Blog Seja Livre nos seus círculos do GOOGLE+. Se você usa ORKUT, nós também estamos lá, inclusive no IDENTI.CA e Linkedin.