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

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.

Sumário

Dono, Grupo e Outros
Divisão dos bits da permissão
Leitura, Escrita e Execução
Os riscos da permissão 777

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:

000 = --- = 0 = nenhuma permissão
001 = --x = 1 = somente permissão de execução
010 = -w- = 2 = somente permissão de escrita
011 = -wx = 3 = somente permissões de escrita e execução
100 = r-- = 4 = somente permissão de leitura
101 = r-x = 5 = somente permissões de leitura e execução
110 = rw- = 6 = somente permissões de leitura e escrita
111 = rwx = 7 = permissões de leitura, escrita e execução (acesso total)

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 uduá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.

 

Para aprender mais sobre Comandos Linux e Shell Script, veja meu curso Shell Script Para Programadores.