CHMOD: Permissões em Sistemas Linux e Unix-Like

AGRADEÇA AO AUTOR COMPARTILHE!

Sistemas Operacionais Unix-Like, como o Linux, permitem restringir acesso a arquivos por meio do sistema de permissões. Como tudo em Linux é tratado como arquivo, as permissões são válidas para arquivos, diretórios, dispositivos de entrada/saída etc.

Não somente usuários Linux devem conhecer o sistema de permissões. Desenvolvedores que programam sistemas que rodarão em plataforma Linux devem conhecer o sistema de permissões também. É muito comum vermos programadores PHP falando “dê chmod 777, que resolve o problema de permissão”. Isso não é solução, é apenas o começo de um possível problema – e grave – futuro.

Dono, Grupo e Outros

As permissões estão divididas em três níveis: permissões para o dono do arquivo, permissões para o grupo ao qual pertence o dono do arquivo e permissões para os outros usuários.

É por isso que sempre são mostrados três números, como 755, 644 ou três grupos de letras, como rwxr-xr-x ou rw-r–r–. Cada grupo corresponde a um nível de permissão.

O primeiro conjunto corresponde às permissões do dono do arquivo. O segundo, do grupo ao qual pertence o dono do arquivo. E o terceiro, ao outros usuários.

Divisão dos bits da permissão

Cada conjunto citado acima corresponde a três bits. Com três bits, é possível formar oito combinações:

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

O primeiro bits corresponde a permissão de leitura (read). O segundo corresponde à permissão de escrita (write). O terceiro, à de execução (execution). Sendo assim, podemos reescrever as combinações acima da seguinte forma:

Leitura, Escrita e Execução

Vamos esclarecer o que significa ter permissão de leitura, escrita e execução em arquivos e diretórios.

Arquivos

  • Permissão de escrita em arquivo significa poder modificar o conteúdo do arquivo.
  • Permissão de leitura de arquivo significa poder acessar (ler) o conteúdo do arquivo.
  • Permissão de execução de arquivo significa poder executar o arquivo no terminal de comandos (shell).

Diretórios

  • Permissão de escrita em diretórios significa poder criar arquivos no diretório. Além disso, permissão de escrita possibilita a remoção de arquivos existentes, assim como a modificação das permissões dos arquivos desse diretório.
  • Permissão de leitura de diretórios significa poder acessar (ler) o conteúdo do diretório, ou seja, fazer a listagem do conteúdo do diretório.
  • Permissão de execução em diretórios significa poder entrar no diretório, seja por meio do comando cd ou acessando via URL no navegador.

Os riscos da permissão 777

Permissão 777 significa acesso total. Se um diretório tem permissão 777, qualquer usuário pode mexer naquele diretório, inserindo ou removendo arquivos, além de poder mudar as permissões deles. Qualquer usuário pode inserir um script ou programa executável malicioso, dar permissão de execução e executá-lo quando quiser. Imagine isso ocorrendo em um servidor de hospedagem! É um risco enorme! É por isso que sempre insisto: nunca use permissão 777.

É muito comum vermos “programadores” PHP postando dúvidas em fóruns falando que estão recebendo mensagem de erro de permissão. Aí alguém responde “dá chmod 777″. Nunca façam isso!

O correto é verificar o dono do arquivo e definir as permissões adequadas. Normalmente usa-se 755 para diretórios e 644 para arquivos não executáveis, como é o caso do PHP rodando em servidores WEB.

Abraços,

Beraldo
Visite meu blog: www.rberaldo.com.br
Siga-me no Twitter: @rberaldo

AGRADEÇA AO AUTOR COMPARTILHE!

1 Comentários

Enio Marconcini
1

Parabéns pelas dicas Roberto,
eu já cansei de ver, na prática, programadores php dizerem a famosa frase do chmod 777, rsrs

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">