web-dev-qa-db-pt.com

Problema de permissões com Laravel não CentOS

Eu clonei um repo de laravel para minha caixa do CentOS 7. Quando tento executá-lo, recebo um erro 500 sem nada exibido.

Então eu verifico /var/log/httpd/error_log e vejo que tenho alguns erros de permissão:

[Mon May 16 11:39:32.996441 2016] [:error] [pid 2434] [client 104.156.67.195:39136] PHP Fatal error:  Uncaught UnexpectedValueException: The stream or file "/var/www/html/MYSITE/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied in /var/www/html/MYSITE/bootstrap/cache/compiled.php:13701
Stack trace:
#0 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13635): Monolog\\Handler\\StreamHandler->write(Array)
#1 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13396): Monolog\\Handler\\AbstractProcessingHandler->handle(Array)
#2 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13494): Monolog\\Logger->addRecord(400, Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
#3 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13189): Monolog\\Logger->error(Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
#4 /var/www/html/MYSITE/bootstrap/cache/compiled.php(13160): Illuminate\\Log\\Writer->writeLog('error', Object(Symfony\\Component\\Debug\\Exception\\FatalErrorException), Array)
# in /var/www/html/MYSITE/bootstrap/cache/compiled.php on line 13701

Eu fiz o seguinte para tentar superar os problemas:

chmod -R 775 storage
chmod -R 775 vendor
chown -R Apache:apache storage

Então, agora mostra como:

-rwxrwxr-x. 1 Apache apache 2156 May 16 11:41 storage/logs/laravel.log

Mas isso não funcionou.

Curiosamente, eu digitei incorretamente alguns comandos artisan anteriormente e eles pareceram adicionar logs ao logfile ...

Eu já li/tentei:

15
Martin

Acontece que o problema é com selinux

Eu encontrei esta resposta , o que resolveu o meu problema.

Prove que este é o problema desativando selinux com o comando

setenforce 0

Isso deve permitir a gravação, mas você desativou a segurança adicional Em todo o servidor. Isso é ruim. Transforme o SELinux de volta

setenforce 1

Então, finalmente, use o SELinux para permitir a gravação do arquivo usando este comando

chcon -R -t httpd_sys_rw_content_t storage

E você está fora!

48
Martin

Eu preciso fazer mais ajustes para o SELinux do que apenas para storage. Especialmente o diretório config pode te dar esse problema no Laravel bootstrapping. 

Se você Sudo setenforce permissive e ele funcionar, então retorne Sudo setenforce enforcing e siga abaixo.

Configuração de laravel do SELinux: Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/storage(/.*)?" Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/bootstrap/cache(/.*)?" Sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/site/laravel/config(/.*)?" restorecon -Rv /var/www/site/

1
blamb