【问题标题】:Allowing PHP to change file and directory ownership and permission允许 PHP 更改文件和目录的所有权和权限
【发布时间】:2009-07-06 03:26:41
【问题描述】:

我想构建一个简单的网络应用程序,它管理服务器上的一些目录。我想让人们选择使用 chown 和 chmod。

向 PHP 授予此权限最安全的方法是什么?最快的方法是以 root 身份运行 Apache 和 PHP,但这似乎不是一个聪明的主意。

我想到的另一件事是创建一个具有 setuid root 的单独脚本..

谢谢!

【问题讨论】:

  • chown 需要 root。 chmod 需要 root,或者是文件的所有者(或者可能在组中更改组/其他权限,但不确定这一点)。
  • 是的..因此我想到了使用单独的 setuid 根脚本..

标签: php linux apache root


【解决方案1】:

嗯,一开始这听起来确实是一个危险的想法,我更愿意坐下来仔细考虑要实现的目标的整个策略。

当然,危险在于远程用户可以修改或上传可执行脚本的权限提升。 Web 应用程序中的完整 chown/chmod 相当于将您的 root 密码粘贴到页面上。

究竟需要发生什么?

如果 chown 出于某种原因需要发生但不是 root(我们希望),那么应该包装该功能。我会接受用户请求并将它们排队,然后有一个单独的进程(可以是 shell、php、perl 等)通过 cron 检查这个队列,检查请求是否符合允许的参数,并进行更改.

【讨论】:

  • 嗨,Devin,我想制作一个 Web 界面,允许人们通过 FTP 或 SSH 以外的其他方式管理他们的 public_html 和主目录。我确实意识到风险,但从假设的角度来看,我也很好奇最合适的方法是什么。
  • 而“适当”我实际上是指最安全的解决方案:)。另一个用例是允许网络应用程序更改它自己的配置。在大多数情况下,人们只是将配置设置为世界可写或由 www-data 拥有,但这似乎也不是最好的主意。
  • 出于安全原因,PHP 具有 chmod 和 chown 函数,它们必须在 dir 中 apache 具有读/写权限的文件中使用。
【解决方案2】:

一种方法是在您的机器上设置 sudo(假设它是 Linux 机器)。 Sudo 允许您运行提升的命令,受 sudoers.conf 文件中规定的限制的约束。使用严格的规则将其使用限制为运行 Web 服务的用户在特定目录中所需的命令(如 www-data),然后从 PHP 脚本调用命令 shell,如 tis:

shell_exec("sudo chmod 777 dirname");

一定要确保你的 sudo 配置是严格的,以确保突破几乎是不可能的。

【讨论】:

  • 我知道sudo可以用来限制可以发出什么命令,但是你能限制参数吗? IE。您可以使用 sudo 允许 chmod 666 file.txt 但不允许 chmod 777 hack.jpg.php 吗?
  • 您可以拦截 PHP 代码中的非法掩码,或者 sudoers 文件确实允许在所有主机名、路径名和命令行参数中使用通配符和输入和排除范围(不是 REGEX,但可用)。跨度>
  • 我强烈建议不要将 shellexec 用于用户尝试执行的操作。 php 命令 chmod 和 chgrp 是在哪里制作的,所以你不需要使用 shellexec
  • 我同意,但德文的要求显然需要 root 或等效访问权限,即:www-data 不是包含目录的所有者。 PHP 的 chmod、chown、chgrp 和 fileperms 不能提升。
  • 如果没有 TTY shell,我不相信 sudo 会起作用,与 setuid 位相比,这似乎是一种大锤方法。
【解决方案3】:

也许你应该看看 php 命令:chmod、chown、chgrp 和 fileperms

chmod

chmod("/somedir/somefile", 0600);

【讨论】:

  • 这些功能需要root用户运行。
猜你喜欢
  • 2018-08-15
  • 2012-02-04
  • 1970-01-01
  • 2013-09-19
  • 2012-04-03
  • 2018-05-29
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多