【问题标题】:Laravel 5.6 - permission denied on logs/laravel.log ubuntu xenial 16.04Laravel 5.6 - 在日志/laravel.log ubuntu xenial 16.04 上的权限被拒绝
【发布时间】:2018-11-03 21:22:06
【问题描述】:

之前访问过这方面的主题无济于事 - 努力摆脱日志/laravel.log 上的权限错误“无法打开流”,唯一目前有效的是将目录权限设置为 777,这在实时服务器生产环境中当然是非常糟糕的做法。

我几乎遵循了每一个教程,例如这个是我最近遇到的:

https://vijayasankarn.wordpress.com/2017/02/04/securely-setting-file-permissions-for-laravel-framework/

还有这个

https://www.howtoforge.com/tutorial/install-laravel-on-ubuntu-for-apache/

一般来说,我执行的一些检查包括通过运行检查所有权/组

ps aux | egrep '(apache|httpd)'

返回以下结果

根 6723 0.0 0.4 77944 4880 ? SS 14:53 0:00 /usr/sbin/apache2 -k 开始
www-数据 6726 0.0 0.6 432716 6708 ? Sl 14:53 0:00 /usr/sbin/apache2 -k 开始
www-数据 6727 0.0 0.6 432772 6696 ? Sl 14:53 0:00 /usr/sbin/apache2 -k 开始
ubuntu 6874 0.0 0.0 12948 948 pts/0 S+ 15:07 0:00 grep -E --color=auto (apache|httpd)

所以我知道我的服务器归 www-data 所有 - 即使执行 sudo chgrp 更改(例如 ubuntu:www-data)也没有效果。

我在本地环境中遇到了同样的问题。在生产中,我的刀片模板实际上呈现为原始文本内容,而不是显示 Laravel 错误页面 - 假设这是因为引导程序/缓存(我也修改了权限和所有权)无法写入/部分写给。

我还注意到很多教程都提到 bootstrap/cache 位于 /storage 文件夹中,但在较新的 Laravel 版本中,这似乎已移至 /project-directory/bootstrap 而不是 /project-directory/storage/引导等。

我在 Amazon AWS 实例上运行 Ubuntu Xenial 16.04。

任何帮助将不胜感激。

【问题讨论】:

  • 你能显示存储和日志目录的所有者/权限吗?
  • @aynber 当然它会输出这个:drwxr-xr-x root root / drwxr-xr-x root root var drwxr-xr-x root root www drwxr-xr-x root root html drwxrwxr-x www-data www-data flexischedule drwxrwxr-x ubuntu www-data storage drwxrwxr-x ubuntu www-data logs 我已经以所有者身份在 ubuntu 和 www-data 之间切换,但仍然没有。抱歉,cmets 中的格式不是很好
  • @logikurl 在你的项目根目录中使用这些命令你应该很高兴去chmod -R 775 storage chmod 775 bootstrap/cache chown -R www-data ./
  • 目录是组可写的,但这并不总是传递到文件夹中。它们归 ubuntu 而不是 www-data 所有,所以这可能会使事情变得有些混乱。 laracasts.com/discuss/channels/general-discussion/… 有一些扩展命令可能会有所帮助。
  • @logikurl 更多,也许你根本没有在 apache 上运行 php?暂时将您的 public/index.php 内容更改为 <?php phpinfo(); 如果它没有呈现 php 信息页面,那么您需要查看有关如何在服务器上正确安装和设置 apache 的教程...

标签: php laravel apache ubuntu permissions


【解决方案1】:

所以@Bart 引导我弄清楚。这里的问题是两件事的混合。首先确实是权限错误,chmod 似乎已将整个项目目录修复为 755 或 775,然后将 chgrpwww-data - 请参阅原始问题中的 cmets 以获得有关此方面的指导。

其次,由于一些错误的配置,在从我原来的 Lamp-server 安装中删除它后,我不得不在某个时候重新安装 apache,这出于某种原因,导致我的 PHP 在我的服务器和 php 上被禁用apache 的文件(我发现它们被称为 php.mod 和 php.load)丢失了。要么是这个,要么是最初的切换和升级到 7.2 禁用了我的 PHP(这似乎是一个记录在案的 Ubuntu 错误,在此处参考 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=893481)。

Apache 没有提及其 mods-enabledmods-available 文件夹中的任何 PHP 文件。因此,我按照此处的指南启动并运行它,但更改了变量以匹配我当前的 PHP 版本 7.2,并将其指向 libphp7.2.so

https://digitizor.com/how-to-fix-module-php5-does-not-exist-error-in-apache-linux/

我的配置也遇到了一些与 mcrypt 相关的错误,主要是因为 mcrypt 在 7.2 上不再受支持,因为它不再被维护并且他们正在逐步淘汰它以向 libsodium 迈进,但是有我相信仍然对它有一些依赖。我使用 php-pear 通过 pecl 安装了这个。

还有很多我无法记录的错误内容,我强烈建议任何阅读本文的人,根据您的操作系统遵循良好的指南,并尽量不要返回/修改您的初始核心 LAMP /WAMP/MAMP 等设置太像我所做的(我认为通过清除手动删除 apache2 然后重新安装会触发服务器端问题)。

启用 PHP 后,文本不再输出原始内容,权限更改必须有效,因为我现在看到 Laravel 默认欢迎页面。

对于“裸”服务器上的任何新安装 - 请仔细检查您正在使用的服务器系统是否启用了 PHP,以及 PHP 重写、mbstring、dev 和 CLI 模块。

【讨论】:

    猜你喜欢
    • 2019-06-05
    • 1970-01-01
    • 2018-02-20
    • 2015-07-30
    • 2018-09-14
    • 2017-11-15
    • 2018-07-15
    • 2011-06-11
    • 2016-04-10
    相关资源
    最近更新 更多