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.
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015