Permissões de arquivo: chmod e chown de um jeito simples
Para Magenteiros
Atualizado em 17 de março de 2024
Quando falamos de permissões em sistema Linux (ou MacOs) logo entendemos que vamos usar os comandos chmod
e chown
em algum terminal. Mas entender como eles funcionam de fato é algo que geralmente é postergado por anos.
Se você quiser entender como eles funcionam, para que servem, e aprender isso de um jeito simples, invista 10 minutos na leitura e compreensão deste artigo.
Erros de permissão, sejam eles no Magento, no Symfony, no WordPress ficarão mais fáceis de serem compreendidos, e você entenderá que chmod 777
não é a solução correta para seus problemas.
Medo do terminal? Leia meu outro artigo sobre os comandos básicos usados no terminal e porque ele é um bem necessário no Magento 2.
Grupo e dono: todo arquivo tem um
Quando um arquivo é criado ele possui um dono (quem o criou) e um grupo. Todo usuário pertence a um ou mais grupos.
Digitando whoami
(quemsoueu) você descobrirá o nome do usuário atual, e digitando groups
descobrirá a quais grupos este usuário pertence.
$ whoami magenteiro $ groups magenteiro www-data
O comando ls -la
listará todos os arquivos do diretório atual, trazendo informações sobre o nome do dono, o grupo que cada arquivo e diretório pertencem e quais permissões cada um deles tem sobre cada item.
$ ls -la total 20320 drwxr-xr-x 15 magenteiro www-data 4096 Feb 11 00:00 . drwxr-xr-x 3 root root 4096 Jul 4 2019 .. -rw-r--r-- 1 magenteiro www-data 11249 Nov 12 04:47 .htaccess -rw-r--r-- 1 magenteiro www-data 11382 Nov 12 04:47 .htaccess.sample -rw-r--r-- 1 magenteiro www-data 766543 Nov 12 04:47 CHANGELOG.md -rw-r--r-- 1 magenteiro www-data 650 Nov 12 04:47 COPYING.txt drwxr-xr-x 3 magenteiro www-data 4096 Nov 12 06:00 app drwxrwsr-x 84 magenteiro www-data 4096 Nov 12 04:47 vendor
- Primeira coluna (drwxr-xr-x)
Traz informações sobre as permissões que o dono, o grupo e outros usuários tem sobre o item. A primeira letra indica se o item é um diretório (d) ou um arquivo (-). - Terceira coluna (magenteiro, root, etc)
Nome do usuário que é o dono do arquivo ou diretório - Quarta coluna (www-data, root, etc)
Nome do grupo ao qual o arquivo ou diretório pertence
Entendendo as permissões rwx
As permissões de um arquivo são divididas na seguinte ordem:
Cada letra representa uma permissão que cada um tem sobre o arquivo ou pasta.
As letras geralmente são:
- r – read (leitura)
- w – write (escrita)
- x – execute (execução)
E há ainda a letra s
que é menos utilizada. Ela representa permissão de ajuste de user id (setuid). Esta é uma permissão especial que permite que qualquer usuário execute o arquivo como se fosse o dono. Em outras palavras, supondo que o dono do arquivo seja o root, qualquer usuário poderia executá-lo com o comando sudo
.
No exemplo da imagem acima, o dono do arquivo possui permissão para ler (r) e escrever/modificar(w) o arquivo. Usuários que estiverem no mesmo grupo que este arquivo pertence poderão apenas ler(r) o arquivo. Enquanto outros usuários, mesmo que não sejam o dono, nem façam parte deste grupo, poderão apenas ler (r) o arquivo.
Entendendo os erros de permissão
Quando nosso servidor web (apache ou nginx por exemplo) serve uma aplicação (PHP por exemplo), ele faz isso usando um usuário que está inserido em um ou mais grupos. Sendo assim, se este usuário não tiver permissão de leitura nos arquivos da nossa aplicação, certamente teremos erros de permissão.
Permissão de escrita também é necessária quando nossa aplicação tenta escrever arquivos de sessão, gerar arquivos de cache, ou mesmo quando fazemos upload de um arquivo e o mesmo tenta ser salvo em determinada pasta que nosso servidor web não possui a permissão necessária.
Alterando as permissões (um jeito simples de entender)
O comando chmod é o responsável por alterar as permissões de um arquivo ou pasta. Geralmente este comando é seguido de uma sequência de 3 números (ex: chmod 754 arquivo.txt
).
No entanto, existe uma forma um pouco mais fácil de utilizá-lo e que facilita bastante a nossa vida.
chmod [tipo][operador][permissão] arquivo
Onde tipo pode ser:
- u: dono do arquivo (user who owns it)
- g: grupo do arquivo (group)
- o: outros (others)
- a: todos os acima (all)
Os operadores podem ser:
- +: o sinal de mais adicionará as permissões a seguir
- -: o sinal de menos removerá as permissões a seguir
E a permissão, pode ser a combinação de uma ou mais das letras que já vimos acima.
- r: para leitura (read)
- w: para escrita (write)
- x: para execução (execute)
Exemplos:
chmod u+rwx arquivo.txt
Adiciona permissão de leitura, escrita e execução para o dono do arquivochmod g-w arquivo.txt
Remove permissão de escrita para pessoas inseridas no grupo ao qual o arquivo pertencechmod a+r arquivo.txt
Dá permissão de leitura para todo mundochmod u+x,g-w,o+r arquivo.txt
Acrescenta permissão de execução para o dono, remove permissão de escrita para o grupo, e adiciona permissão de leitura para outros.chmod -R u+rw diretório
Dá permissão de leitura e escrita para o dono em todos os arquivos e diretórios dentro de uma pasta recursivamente.chmod o-rwx *.sql
Remove todas as permissões de que não é o dono nem faz parte do grupo, em todos os arquivos do diretório atual com extensão .sql.
Alterando o dono e o grupo
Por fim, temos o comando chown (change owner) que nos permite alterar o usuário e/ou grupo de um arquivo ou pasta.
chown magenteiro:www-data arquivo.txt
O dono passa a ser “magenteiro” e o grupo “www-data”chown :www-data arquivo.txt
O grupo passa a ser “www-data” e o dono permanece o mesmochown magenteiro arquivo.txt
O dono passa a ser “magenteiro” e o grupo permanece o mesmochown -R :www-data diretorio
Altera o grupo de um diretório e todos seus arquivos e subpastas recursivamente.
Conclusão
Você pode “resolver” seus problemas de permissão com “chmod -R a+rwx” ou “chmod -R 777” seguidos do caminho da sua aplicação. No entanto, ao fazer isso você comprometerá a segurança da sua aplicação e de arquivos de configuração, facilitando a exposição de arquivos sensíveis que podem conter credenciais de banco de dados e outras informações importantes.
Um outro erro comum que vejo no mundo Magento é fazer tudo com usuário root. O Magento e nenhuma outra aplicação deveria ser instalada em um servidor com este usuário.
Idealmente devemos instalar o Magento com um usuário comum e depois ajustar as permissões como mostrado na documentação oficial, e como explicado no Magento 2: O Curso (na seção onde configuramos um servidor Magento do zero na nuvem).
Uma regra que costumo seguir para não ter problemas de permissão no Magento é:
- Configurar o grupo com o mesmo grupo usado pelo nosso servidor web (ex:
chown -R :www-data <pastamagento>
) - Nunca executar o
bin/magento
e nem alterar nada usando o usuário root. - Sempre usar um usuário que esteja inserido neste grupo para executar todas as tarefas administrativas, fazer deploys, alterar arquivos, etc. Isso pode ser feito com o comando
sudo -iu <usuario>
. Ex:sudo -iu magenteiro
- PagSeguro (PagBank) para Magento 1 recebe a Nova Geração - 9 de abril de 2024
- Recorrência no WooCommerce Sem Plugins Pagos - 28 de janeiro de 2024
- Chargeback. O que é, e como se livrar deles. - 19 de dezembro de 2023
Deixe seu comentário
[fbcomments url="https://www.magenteiro.com/blog/para-magenteiros/permissoes-um-jeito-simples-de-entender/"]