Cursos Magento

Permissões de arquivo: chmod e chown de um jeito simples

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:

exemplo de permissões de arquivo linux

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 arquivo
  • chmod g-w arquivo.txt
    Remove permissão de escrita para pessoas inseridas no grupo ao qual o arquivo pertence
  • chmod a+r arquivo.txt
    Dá permissão de leitura para todo mundo
  • chmod 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 mesmo
  • chown magenteiro arquivo.txt
    O dono passa a ser “magenteiro” e o grupo permanece o mesmo
  • chown -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 é:

  1. Configurar o grupo com o mesmo grupo usado pelo nosso servidor web (ex: chown -R :www-data <pastamagento>)
  2. Nunca executar o bin/magento e nem alterar nada usando o usuário root.
  3. 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
Últimos posts por Ricardo Martins (exibir todos)
Assuntos: | | |
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/para-magenteiros/permissoes-um-jeito-simples-de-entender/"]