无法正确设置权限以允许 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 位,而不是组写入位。
所以我在 /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 位,而不是组写入位。