在日志文件中写入时,Laravel 5权限被拒绝

ade*_*min 7 ubuntu logging laravel-5

我有Ubuntu和Laravel 5框架,我在浏览器中看到了白屏.
当我更改storage/logs目录权限时,它会有所帮助,但由于"每日"日志配置,我必须每天都这样做.

Bas*_*MHL 6

出于明显的安全原因,storagevendor文件夹的权限应保持775不变.

但是,您的计算机和服务器Apache都需要能够在这些文件夹中写入.例如:当您运行命令时php artisan,您的计算机需要在日志文件中写入storage.

您需要做的就是将文件夹的所有权授予Apache:

sudo chown www-data:www-data /path/to/your/project/vendor
sudo chown www-data:www-data /path/to/your/project/storage
Run Code Online (Sandbox Code Playgroud)

然后,您需要将您的计算机(由它引用username)添加到服务器Apache所属的组.像这样:

sudo usermod -a -G www-data userName
Run Code Online (Sandbox Code Playgroud)

最常见的groupNamewww-data,您可能希望将其替换为正确的组.


Isu*_*uru 5

我得到了同样的错误。通过使用以下命令,我可以解决它。出于某种原因,它与日志文件无关。

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache
Run Code Online (Sandbox Code Playgroud)


ade*_*min -3

简短回答:

sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart

广泛的答案:

当您在 Apache 服务器上启动 Laravel 5 框架并默认启用“每日”选项来创建日志文件时,有时您会因文件权限而面临写入日志文件的禁止。
通常,当您有 php 项目时,所有文件都属于www-data用户,并且当前用户不需要写入日志文件。
对于 Laravel,有两个不同的进程需要写入日志文件: 1)当您在浏览器中执行某些操作时
Apache 服务器(用户);2)当您在命令行中 执行时,Php进程(您的用户) 。www-data
php artisan something

当然,每次你想使用 artisan 时,你可以执行 sudo -u www-data php artisan your_command (就像这里建议的那样),但这有点烦人。
首先,您需要为 Apache 用户授予供应商和存储目录的权限。最简单的方法(但不是最好的方法)是执行: sudo chmod -R 777 vendor storage

现在,让我们看看在这两种情况下创建日志文件时会发生什么。

如果最初日志文件storage/logs/laravel-2015-mm-dd.log是通过命令引发的错误创建的 php artisan something(情况 2),则日志文件将具有

`-rw-rw-r-- your_user:your_user` 
Run Code Online (Sandbox Code Playgroud)

权限。
如果它是由您的 apache 服务器创建的(情况 1),通常在www-data用户下启动,权限将如下所示:

-rw-r-r-- www-data:www-data
Run Code Online (Sandbox Code Playgroud)

所以,我的建议是更改 apache 新创建的文件的权限。
让我们umask 000/etc/resolv.conf文件添加行。

echo "umask 000" | sudo tee -a /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)

现在,

sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

就是这样。请注意,由于可能存在安全风险,
该解决方案仅适用于开发环境。

  • 生产环境要做什么?例如,在 DigitalOcean 上?Nginx 应该做什么?例如,在 DigitalOcean LEMP 上? (4认同)
  • 这是非常非常非常糟糕的建议。不要遵循这个。首先,/etc/resolv.conf 与文件权限“无关”。如果你疯了,你可以使用 pam_umask 在 /etc/login.defs 中为常见的 Linux 系统设置默认 umask。另一个常见的放置位置是 /etc/profile,甚至是 /etc/rc.local。不过,你不应该这样做。即使在开发系统上,安全性也很重要。 (3认同)
  • 有些海报对你很粗鲁。您提出了一个其他发帖人没有想到的关键概念,即 Artisan 和网络流量可以来自不同的用户。这在我的案例中造成了巨大的问题。我的调度程序每五分钟运行一次artistan...但是以root身份运行。因此,我的日志文件将旋转到根目录,然后当网络请求尝试写入日志时,系统就会崩溃。我通过确保艺术家调度程序的 crontab 命令以 Web 用户身份执行而不是 root 身份来解决此问题。谢谢你! (2认同)