无法正确设置权限以允许 www-data 使用 PHP 创建文件

Can't get permission setup correctly to allow www-data to create files using PHP

所以我在 /var/www/html/test.php 中有一个 PHP 文件,我有它 运行 代码 shell_exec('touch /home/pi/Desktop/test_file')

然而,网页显示正常,但当我检查 apache 日志文件时,我总是得到拒绝权限。我知道 apache 运行 宁作为 www-data 用户和我的主要用户 pi 可能有一些权限冲突(我是这个东西的新手)。

我尝试了很多在网上找到的选项,最有希望的是 here,它建议我 运行 命令:

sudo chown -R pi:www-data /home/pi/Desktop
sudo chmod -R g+s /home/pi/Desktop

...但我的权限仍然被拒绝。谁能建议我可能还需要配置哪些权限?我想确保安全,但同时需要我的 PHP 文件才能创建新文件。我使用 Desktop 作为示例目录,但实际上我不关心哪个目录,我只需要一个目录。我尝试 touch/var/www/html 中编辑一个文件,但那也是 permission denied。谢谢!

首先,你到底为什么要使用 shell_exec 创建文件? PHP 有自己的 touch() function that will do that for you. You can also create files just by opening a nonexistent file using certain modes (ie, fopen("myfile", "w"))

使用 exec 创建文件肯定会影响您的权限。

您需要找出哪个用户 PHP 是 运行 并对该用户进行 chown。您可以通过 运行 get_current_user().

找到答案

然后您需要使用chmod 更改权限。评论里有例子,我就不重复了。祝你好运。停止使用 shell_exec.

如果你的 apache 进程是 运行ning 作为 www-data,并且文件所有权是 pi:www-data,你可能需要 运行 这个 chmod:

sudo chmod -R g+w /home/pi/Dekstop

首先,如果文件不是组可写的,将组设置为 www-data 并不重要。模式 755 将确保 apache 可以 读取 文件,但 www-data 用户仍然无法写入。

其次,使用 "g+w" 添加组写入而不会弄乱任何其他位。 [644 变为 664,755 变为 775)]。这样您就可以安全地递归调整权限,而不会使不应该执行的文件成为可执行文件。

顺便说一句,sudo chmod g+s ... 可能不是您想要的。这将改为设置 sgid 位,而不是组写入位。