2009-07-06 162 views
4

我想构建一个简单的Web应用程序,它管理服务器上的某个目录。我想给人们使用chown和chmod的选项。允许PHP更改文件和目录的所有权和权限

给PHP这个权限最安全的方法是什么?最快的事情就是以root身份运行Apache和PHP,但这似乎并不是一个聪明的主意。

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

谢谢!

+0

CHOWN需要根。 chmod需要root权限,或者作为文件的所有者(或者可以在组中更改组权限/其他权限,但不能确定这个权限)。 – 2009-07-06 03:47:26

+0

是的..因此,我想使用一个单独的setuid根脚本.. – Evert 2009-07-06 20:56:30

回答

6

那么,这听起来像是一个危险的想法开始,我宁愿坐下来思考什么是试图实现的整个策略。

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

什么是需要发生的事情?

如果chown需要出于某种原因而不是根(我们希望),那么应该封装这个功能。我会接受用户的请求并将它们排队,然后有一个单独的进程(可以是shell,php,perl,任何东西)以cron的身份运行检查此队列,检查请求是否符合允许的参数并进行更改。

+0

嗨德文,我想做一个Web界面,允许人们通过FTP或SSH以外的其他方式管理他们的public_html和homedirectory。我确实意识到了这些风险,但是我也从一个假设的角度好奇最合适的方法是什么。 – Evert 2009-07-06 19:41:13

+0

与'适当'我其实是指最安全的解决方案:)。另一个用例是允许Web应用程序更改它自己的配置。在大多数情况下,人们只是将配置设置为全局可写或由www-data拥有,但这看起来并不是最好的想法。 – Evert 2009-07-06 19:43:35

0

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

shell_exec("sudo chmod 777 dirname"); 

请确保您的sudo配置非常紧密,以确保突破几乎不可能。

0

也许你应该看看PHP命令命令:chmod,CHOWN,chgrp命令和fileperms

chmod

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