Laravel 的 apache 文件权限

Laravel 的 apache 文件权限

我正在 Centos 7 发行版上安装 Laravel 应用程序。我使用的是 PHP 7.2,并且已成功安装了 apache 和我的项目。

我能够显示 Apache 启动页面,但是一旦我将虚拟主机指向我的 laravel 公共文件夹,我就会在 apache2 日志中收到文件权限错误。

我已将我的公共文件夹和存储文件夹设置为所有人都可以读/写/执行,但仍然出现错误。

我的虚拟主机:

<VirtualHost *:80>

DocumentRoot /var/www/html/checkers/public

<Directory /var/www/html/checkers/public>
    Options +Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>

</VirtualHost>

我的权限(在 public 和 bootstrap 上临时 chmod 777 之后):

drwxr-xr-x. 13 root root   4096 Jul  6 03:16 .
drwxr-xr-x.  3 root root     22 Jul  6 03:16 ..
drwxr-xr-x.  6 root root    106 Jul  6 03:16 app
-rw-r--r--.  1 root root   1686 Jul  6 03:16 artisan
drwxrwxrwx.  3 root root     34 Jul  6 03:16 bootstrap
-rw-r--r--.  1 root root   1477 Jul  6 03:16 composer.json
-rw-r--r--.  1 root root 143918 Jul  6 03:16 composer.lock
drwxr-xr-x.  2 root root    247 Jul  6 03:16 config
drwxr-xr-x.  5 root root     72 Jul  6 03:16 database
-rw-r--r--.  1 root root    651 Jul  6 03:16 .env.example
drwxr-xr-x.  8 root root    198 Jul  6 03:22 .git
-rw-r--r--.  1 root root    111 Jul  6 03:16 .gitattributes
-rw-r--r--.  1 root root    155 Jul  6 03:16 .gitignore
-rw-r--r--.  1 root root   1022 Jul  6 03:16 package.json
-rw-r--r--.  1 root root   1134 Jul  6 03:16 phpunit.xml
drwxrwxrwx.  4 root root    116 Jul  6 03:16 public
-rw-r--r--.  1 root root   3675 Jul  6 03:16 readme.md
drwxr-xr-x.  5 root root     45 Jul  6 03:16 resources
drwxr-xr-x.  2 root root     75 Jul  6 03:16 routes
-rw-r--r--.  1 root root    563 Jul  6 03:16 server.php
drwxr-xr-x.  5 root root     46 Jul  6 03:16 storage
drwxr-xr-x.  4 root root     83 Jul  6 03:16 tests
drwxr-xr-x. 37 root root   4096 Jul  6 03:22 vendor
-rw-r--r--.  1 root root    549 Jul  6 03:16 webpack.mix.js

/etc/httpd/logs/error_log 中的错误:

[php7:error] [pid 9120] [client 192.168.10.1:46658] PHP Fatal error: 
Uncaught ErrorException:
file_put_contents(/var/www/html/checkers/storage/framework/views/27ab4a7b5ea3854dc076406e3c218364a7743be0.php):
failed to open stream: Permission denied in
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122\nStack
trace:\n#0 [internal function]:
Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2,
'file_put_conten...', '/var/www/html/c...', 122, Array)\n#1
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122):
file_put_contents('/var/www/html/c...', '<?php $__env->s...', 0)\n#2
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php(122):
Illuminate\\Filesystem\\Filesystem->put('/var/www/html/c...', '<?php
$__env->s...')\n#3
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(51):
Illuminate\\View\\Compilers\\BladeCompiler->compile('/var/www/html/c...')\n#4
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Vi in
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
on line 122 
[Fri Jul 06 03:41:01.295172 2018] [php7:error] [pid 9120]
[client 192.168.10.1:46658] PHP Fatal error:  Uncaught ErrorException:
file_put_contents(/var/www/html/checkers/storage/framework/views/27ab4a7b5ea3854dc076406e3c218364a7743be0.php):
failed to open stream: Permission denied in
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122\nStack
trace:\n#0 [internal function]:
Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2,
'file_put_conten...', '/var/www/html/c...', 122, Array)\n#1
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122):
file_put_contents('/var/www/html/c...', '<?php $__env->s...', 0)\n#2
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php(122):
Illuminate\\Filesystem\\Filesystem->put('/var/www/html/c...', '<?php
$__env->s...')\n#3
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(51):
Illuminate\\View\\Compilers\\BladeCompiler->compile('/var/www/html/c...')\n#4
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Vi in
/var/www/html/checkers/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php
on line 122

编辑: 我已经 sudo chmod -R 777 /var/(临时),但仍然收到这些权限错误。

答案1

谢谢你的帮助。事实证明我成功设置了权限,但它们被 Centos 覆盖了。

sudo setenforce 0

以上对我有用。

答案2

您的文件归 root 所有。希望您的 Web 服务器不以 root 身份运行。假设 CentOS 和许多其他 CentOS 一样使用 www-data 作为 Web 服务器可访问文件的组和用户,您可以尝试以下操作:

chown -R www-data:www-data /var/www/html/laravel
chmod -R 755 /var/www/html/laravel/storage

另请参阅 laravel 文档5.6/4.2为什么后者有意义。您可能还需要对缓存目录执行相同操作。

答案3

Laravel 要求某些文件夹对 Web 服务器用户具有可写权限。您可以在项目中使用这些命令:

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

答案4

转到 /etc/selinux
打开配置文件并更改

SELINUX=disabled

相关内容