Como configurar as permissões de arquivo para Laravel

Como configurar as permissões de arquivo para Laravel

Problema

Estou usando o Apache Web Server que possui o proprietário da pasta definido como _www: _www. Eu continuo esquecendo a prática recomendada quando se trata de permissões de arquivo, por exemplo, quando eu crio um novo projeto Laravel 5.

Isso significa que o Apache precisa de acesso às pastas de armazenamento e fornecedor também ou apenas seu conteúdo atual?

O Laravel 5 exige que a pasta de armazenamento seja gravável. Apesar de não ser a melhor ideia, tenho definado a permissão 777 para a pasta

A documentação oficial diz:

O Laravel pode exigir que algumas permissões sejam configuradas: pastas dentro de armazenamento e fornecedor exigem acesso de gravação pelo servidor da web.

Eu entendo que pode ser muito melhor se eu apenas mudasse o proprietário em vez das permissões.

Mas agora estou tendo problemas com meu editor, sempre me pedindo senhas sempre que quiser salvar um arquivo.

Qual seria a melhor maneira de resolver esses problemas ?

Solução

Antes de dar a resposta final, eu só quero declarar o óbvio. Se você deseja dar a qualquer pasta uma permissão 777, você está praticamente invidando todos para ler, escrever e executar arquivos nesse diretório.

Existem basicamente duas maneiras de configurar sua propriedade e permissões:

  • Dê a si mesmo propriedade
  • Faça do servidor da web o proprietário de todos os arquivos.

O segundo é o que a maioria das pessoas faz e é isso que o Laravel sugere.

Supondo que o WWW-Data seja o seu usuário do servidor da web, você pode executar:

sudo chown -r www-data: www-data/path/para/your/laravel-diretório

E isso é bom, porque seu servidor da web possuirá arquivos e pode executar. A parte ruim é que seu usuário conectado (via FTP ou SSH) provavelmente será um usuário diferente, então o que você deseja fazer é adicionar esse usuário ao grupo de servidores da web:

sudo usermod -a -g www -data ubuntu

Obviamente, isso pressupõe que seu servidor da web esteja sendo executado como WWW-Data (o padrão da propriedade) e seu usuário é Ubuntu (é Vagrant se você estiver usando Homestead).

Então, uma boa prática é definir todos os seus diretórios como 755 e todos os seus arquivos como 644 ... defina permissões de arquivo usando o seguinte comando:

sudo encontre/caminho/para/seu/laravel -diretório -Type f -exec chmod 644 \;

Definir permissões de diretório:

sudo encontre/caminho/para/seu/laravel -diretório -Type d -exec chmod 755 \;

Seu usuário como proprietário

O que eu prefiro é possuir todos os diretórios e arquivos com os quais estou trabalhando (ele facilita o trabalho com tudo), então eu faço:

sudo chown -r my-user: www-data/path/to/your/laravel-diretório

Então eu posso apenas dar essas permissões a mim e ao usuário do servidor da web:

sudo encontre/caminho/para/seu/laravel -diretório -Type f -exec chmod 664 \;
sudo encontre/caminho/para/seu/laravel -diretório -Type d -exec chmod 775 \;

Uma coisa que você não quer esquecer é dar ao servidor da web acesso aos arquivos de leitura e gravação na pasta de cache

Seu servidor da web precisará fazer upload e armazenar dados também, portanto, também dê as permissões para a pasta de armazenamento:

sudo chggrp -r www -dados de bootstrap/cache
sudo chmod -r ug+rwx bootstrap/cache

Isso não foi tão difícil, não foi?