【问题标题】:Can't get permission setup correctly to allow www-data to create files using PHP无法正确设置权限以允许 www-data 使用 PHP 创建文件
【发布时间】:2016-03-25 14:00:38
【问题描述】:

所以我有一个位于 /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 文件能够创建新文件。我使用桌面作为示例目录,但实际上我不在乎哪个目录,我只需要一个目录。我试过touch/var/www/html 中创建一个文件,但那也是permission denied。谢谢!

【问题讨论】:

  • sudo chmod -R 755 /home/pi/Desktop 应该可以修复它。
  • 为什么不使用 touch() ? php.net/manual/en/function.touch.php
  • sudo chmod -R 755 /home/pi/Desktop 安全吗?我对在线安全一无所知,但是对于未经授权访问此网络服务器是否存在任何安全问题?
  • @jake9115:755 将为所有者应用读取、写入和执行权限,并为组和其他人应用读取和执行权限。 -R 标志表明这应该在整个 /var/www/ 目录和子文件夹中递归。
  • 感谢您的解释。我确实执行了sudo chmod -R 755 /home/pi/Desktop,但仍然得到permission denied

标签: php apache chmod


【解决方案1】:

如果你的 apache 进程作为 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 位,而不是组写入位。

【讨论】:

    【解决方案2】:

    首先,你为什么要使用 shell_exec 创建文件? PHP 有它自己的touch() 函数可以为你做这件事。您还可以通过使用某些模式(即fopen("myfile", "w"))打开不存在的文件来创建文件

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

    您需要找出 PHP 正在以哪个用户身份运行,并 chown 给该用户。你可以通过运行get_current_user() 找到它。

    然后你需要用 chmod 更改权限。 cmets中有一个例子,所以我不会重复它。祝你好运。停止使用 shell_exec。

    【讨论】:

    • 我使用的是shell_exec,因为touch 命令只是一个示例。真的,我打电话给raspi-still,这是一个用树莓派相机模块拍照的命令。该命令需要能够创建一个文件,该文件总是被拒绝权限。抱歉误导了。
    • get_current_user() 返回root
    • 那你需要chown到root
    • 另外,请确保您的路径是正确的。我假设您使用的是 linux,请尝试使用 ~ 而不是 /home/..
    猜你喜欢
    • 2021-10-21
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多