适当的Laravel存储权限

4
我已经将本地的Laravel 5存储文件夹设置为权限755和用户www-data,因为我在我的机器上使用apache2。然而,当出现错误时,我得到的是空白屏幕而不是堆栈跟踪,所以我将权限更改为777,这解决了问题。
然而,我感觉这是一个(可怕的)临时补救措施,真正的问题是它允许任何用户使用所有权限修改该目录,而不是只有拥有受限权限的正确用户。我不知道这个问题是否会影响开发或生产服务器,但在这种情况下授予这些权限并不是一个选项。
如何找出哪个用户(或组)实际上需要权限来使用此目录进行Laravel日志记录,以便我可以将该目录分配给他们并将权限返回到755?
我已经尝试过:
ps aux | egrep '(apache|httpd)'

但它显示大多数进程都以 www-data 身份运行...


我该如何确定哪个用户(或组)实际上需要权限来使用Laravel的目录?尝试在您的项目目录中使用ls -l命令。它将打印所有目录及其各自的所有者。要更改所有者,您可以使用chown命令-有关详细信息请参阅man页面。嗯,要检查进程的用户,请使用ps u命令。说实话,这个问题大多与超级用户有关。 - Bagus Tesa
你已经打开了 error_reporting 并配置了你的 .htaccess 了吗? - Sulthan Allaudeen
你是否递归设置了所有者和权限?因为如果你运行 chmod 775 storage,那只会改变 storage 目录的权限,但是里面的文件和文件夹仍然有不同的权限,chown 同理。通常我会运行这个命令来更改组 chgrp -R www-data storage,以及这个命令来更改权限 chmod -R 775 storage,这样你可以将任何用户设置为所有者(甚至是 root),但 Apache 仍然可以写入存储文件,因为组被设置为 www-data。如果这些方法无法解决问题,也请提供你遇到的错误信息。 - Bogdan
您还可以通过以下方式检查哪个用户正在向存储写入:在具有777权限的情况下,只需访问返回视图的路由,然后检查storage/framework/view目录并查看其中的视图缓存文件的所有者(使用ls -l命令),因为它们是由HTTP服务器创建的。如果您正在运行基于Debian的操作系统(例如Ubuntu),则Apache用户很可能是www-data - Bogdan
storage/framework/view 的所有者是 www-data。可能是一个 .htaccess 问题... - myol
2个回答

4

ps aux | egrep '(apache|httpd)' 是正确的做法。

进程

Apache/httpd最初是由用户 root 启动的,但随后会产生处理传入请求的进程,并在其配置中定义的用户下运行。默认用户通常为www-dataapache

服务器操作系统

在 CentOS/RedHat 服务器上,您可能会看到以用户/组 apache(这是默认设置)的身份运行进程。

在 Debian/Ubuntu 上,默认用户设置为处理请求的进程是 www-data

这都假定了 apache 使用 mod-php。如果您使用php-fpm,则运行 PHP 的用户可能单独配置(尽管根据我的经验它与 apache 具有相同的默认值)。

对于 storage 的权限

正如您所知,storage 目录需要由运行这些进程的用户或组(取决于权限)具有写入权限。

www-data?

听起来 ps aux | egrep '(apache|httpd)' 的结果是 www-data,所以很可能(但不完全确定)该目录需要由用户/组 www-data 具有写入权限(通过将其设置为所有者并确保所有者具有这些权限,或通过组权限进行设置,或使它可由任何人写入)。

快速测试

一种简单的方法是删除 storage 目录中的日志文件/视图缓存文件,然后将该目录设置为可被任何用户写入。

在 Laravel 中发起一些请求以重新生成这些文件,然后查看新文件所设置的用户/组。

这是一种查看运行 PHP 的进程所设置的用户/组的方法之一。


这让我解决了问题,将其使用 chown 命令更改为 www-data 用户。 - gthuo

2

storage文件夹的权限也设置为755了吗?如果没有,您需要执行chmod -R 755 storage递归更改权限。但是请注意,使用chmod -R时要小心,因为您可能会误操作将整个服务器的权限都设置为755。


是的,文件夹的权限也被更改了,没有任何区别。 - myol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接