php - Laravel/PHP:包含(.../Controller.php):无法打开流:权限被拒绝
问题描述
使用:Apache, CentOS 7, Laravel 6.x (to be updated next)
问题:成功安装 laravel 后(默认页面显示),我已经移动了我的本地开发文件。现在在替换默认值之前,routes/web.php
我想检查一下是否一切正常。我使用刚刚上传的控制器和视图添加了其中一条路线。
当我尝试访问此页面(..../profile)时,它显示以下错误:
包括(.../Controller.php):无法打开流:权限被拒绝
而默认页面 (.../) 仍然正常工作。
我为尝试修复所做的工作:
sudo chown -R apache.apache /var/www/.../laravel
sudo chmod -R 755 /var/www/.../laravel/storage
sudo chmod -R 755 /var/www/.../laravel/bootstrap/cache
sudo php artisan view:cache
所有文件(包括默认视图)都归 apache.apace 所有,所以所有权是相同的。根据目录权限,我设置了 storage 和 bootstrap/cache 文件夹(https://laravel.com/docs/6.x)。如何解决这个问题?我不知道要解决这个问题...
我可以找到很多有类似问题的人的例子,但它们最终似乎与 /storage 或 /bootstrap/cache 的权限有关。这似乎与那些无关,因此提供的所有建议都没有解决这个问题。
解决方案
已解决:我发现这个资源(CentOS 上 Laravel 的权限问题)声称它可能与 selinux 有关。
当我执行:
setenforce 0
可以访问控制器,并且可以按预期加载站点。由于在安全性方面不合适,我将其重新打开:
setenforce 1
现在同样的错误又回来了:
failed to open stream: Permission denied
然后我设法通过执行以下命令来修复它,使用 semanage fcontext 来管理 SELinux 系统上的默认文件系统标签,如上面链接中第二个答案所建议的那样:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/storage(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/bootstrap/cache(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/config(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/.../laravel/app(/.*)?"
restorecon -Rv /var/www/bikegeartracker.com/laravel/
现在我无论如何都不是 SELinux 专家,但我只能假设这可能会对安全性产生影响。
推荐阅读
- python - 改变 Python 中的计算限制
- kotlin - 父类中受保护的内联方法不能访问其他受保护的方法
- javascript - 将 Javascript 对象解析为数组
- python - 将嵌套字典转换为数据框并与另一个数据框连接
- flutter - Flutter中如何维护TabBarView中的页面状态?
- windows - ESENT 内部:JetPrereadKeys() 的预期行为
- r - 在闪亮的部署中,如何解决 adminLTE 部署问题?
- rx-java - take(1) 是否会阻止上游流动的工作?
- javascript - React Redux 没有调度 API 调用来删除播放器
- python - 使用所有键的行号解析 YAML