www-data 用户无法打开文件以在 php 中写入

www-data 用户无法打开文件以在 php 中写入

我在 Ubuntu 20.04.3 LTS(GNU/Linux 5.4.0-97-generic x86_64)上有一个以 www-data 形式运行的 apache 服务器,在 php 文件中,以下行失败并出现错误:权限被拒绝

$f=fopen("detekst.txt","a+");

查看权限:

la-al 检测.txt
-rw-rw-r-- 1 L146584 leerlingen 1364 二月 15 15:12 detekst.txt

并检查组

群组 www-data
www-data : www-data leerlingen

我还使用 exec(‘whoami’); 验证了 www-data 运行 php。

使用文本编辑器,leerlingen 的另一名成员可以打开该文件进行写入。

所以我真的很困惑,为什么作为 leerlingen 成员的 www-data 无法打开该文件?

如果我将 detekst.txt 的权限更改为 0666:

-rw-rw-rw- 1 L146584 leerlingen 1364 二月 15 15:12 detekst.txt

php代码运行良好!!

另外,当返回 664 文件权限并将组更改为 www-data 时,一切正常。

-rw-rw-r-- 1 L146584 www-data 1478 二月 15 15:45 detekst.txt

我在这里做错了什么?

答案1

您对该文件的组所有权不是www-data在您第一次尝试使用该文件时,因为此类www-data用户和组在文件上没有写入权限644664权限。如果www-data没有该文件的用户或组所有权,则该文件属于“其他”权限类别,即只读(chmod 语言中的 4 = 只读权限)

解决这个问题的方法是按照您所看到的更改组所有权www-data,然后确保权限664至少为,因为这会增加写权限。

或者,将 www-data 添加到另一个组,然后重新启动服务器以确保所有服务都重新启动正确地使用新权限。在 Linux 中,服务已经启动,并且不会继承新的权限组成员身份,直到服务在该“用户”的新会话下完全重新启动,无论它是否是系统守护程序用户。因此,重新启动将有助于在下次启动 Web 服务器时刷新该数据。

相关内容