PHP 可以在没有 0777 的情况下写入目录吗?

PHP 可以在没有 0777 的情况下写入目录吗?

我正在制作一个网站构建器,我有文件render.php,需要写入用户目录。我不想给每个用户目录都赋予 0777,但我仍然需要能够写入它们。有办法吗?

到目前为止我已经得到:

  • render(目录)... 0777
  • render.php... 777 写入->
  • users(目录)....... 0777
  • index.php...777

我想改变这一点以允许 render.php 访问以更改用户的文件,但不允许文件本身执行代码。

答案1

如果我理解正确的话我认为这个程序应该能满足你的要求。

  1. renderusers为用户目录创建一个组:groupadd renderusers
  2. 将目录的组更改user为 renderusers:chgrp renderusers user
  3. 将您的 apache 进程(apache 或 www-data)的用户添加到此组:usermod -G rendergroup -a apache
  4. 更改目录的权限user以包含set group ID该组,以便该组可以写入和更改文件,并且每个新创建的文件都将归此目录下的组renderusers所有:renderuserschmod -R 2770 user
  5. 重新启动 apache,以便它识别他的新补充组

我假设您将 php 作为 DSO 模块运行,而不是通过 cgi 运行。

答案2

我对 Apache 不够熟悉,无法指导您完成配置网站的过程,但我可以在 Unix 权限级别建议一个答案:

  • 定义一个新组(例如riiich_app),
  • 在每个用户的目录上执行chgrp riiich_appchmod 775(并告诉他们不要改变它),然后
  • render.php配置您的 Web 服务器以在组下运行riiich_app

答案3

您可以为您的网络服务器的用户名授予 0777 权限。对于 Apache2,即 www-data。不太清楚如何使用 chmod 执行此操作,但您可以chown www-data 777

相关内容