我想构建一个简单的网络应用程序,它管理服务器上的一些目录。我想让人们选择使用 chown 和 chmod。
授予 PHP 此权限的最安全方法是什么?最快的方法是以 root 身份运行 Apache 和 PHP,但这似乎不是一个聪明的主意。
我想到的另一件事是创建一个具有 setuid root 的单独脚本。
谢谢!
好吧,一开始这听起来确实是一个危险的想法,我更愿意坐下来仔细考虑要实现的目标的整个战略。
当然,危险在于远程用户可以修改或上传的可执行脚本的权限升级。Web 应用程序中的完整 chown/chmod 相当于将您的 root 密码粘贴到页面上。
究竟需要发生什么?
如果 chown 由于某种原因需要发生但不是 root(我们希望),那么应该包装该功能。我会接受用户请求并将它们排队,然后有一个单独的进程(可以是 shell、php、perl 等)通过 cron 检查这个队列,检查请求是否符合允许的参数,并进行更改.
一种方法是在您的机器上设置 sudo(假设它是 Linux 机器)。Sudo 允许您运行提升的命令,受 sudoers.conf 文件中规定的限制的约束。使用严格的规则将其使用限制为运行 Web 服务的用户的特定目录中所需的命令(如 www-data),然后从 PHP 脚本调用命令 shell,如 tis:
shell_exec("sudo chmod 777 dirname");
请确保您的 sudo 配置很紧凑,以确保突破几乎是不可能的。