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:
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?