如何从apache(centOS)以root身份运行cmd?

时间:2011-09-04 15:39:50

标签: php unix centos root setuid

我正在尝试在CENTOS中运行“useradd”命令,但我不能,因为我需要root权限。

在我的php_info();我有'--disable-posix'。我试图重新安装我的PHP,并尝试使用yum和更多选项启用posix,但没有运气。

有人可以帮我制作posix启用或其他一些解决方案吗?我注意到posix_getuid();正在运行,但posix_setuid();不是。

任何解决方案?

我需要通过“用户点击”将useradd插入到passwd(root)命令中。最好和最安全的方法是什么?

非常感谢!

Koren或

5 个答案:

答案 0 :(得分:0)

您想阅读suEXEC文档:http://httpd.apache.org/docs/2.2/suexec.html 然后重新考虑您的应用程序如何工作并找出更好/更安全的方式。

答案 1 :(得分:0)

您可以使用sudo来执行此操作。 运行visudo并输入类似

的内容
apache ALL = (ALL) NOPASSWD: /usr/sbin/useradd

实际上如果你有SELINUX强制执行它将无法工作,而不是使用useradd我会建议编写一个包装器脚本,它正确设置环境并在运行useradd之前进行健全性检查

答案 2 :(得分:0)

我建议写一个shell脚本,它将通过sudo调用useradd。

您可以将特定用户的特定命令添加到/ etc / sudoers(由visudo命令编辑)

应该是这样的:

Cmnd_Alias USERADD = /bin/sbin/useradd *

apache ALL=(USERADD) NOPASSWD:USERADD

调用useradd:

sudo /usr/sbin/useradd USERNAME

不要忘记在php脚本和shell脚本中验证您的输入。

答案 3 :(得分:0)

Sudo可能是一个快速实现这一目标的快速攻击,但它很难保证,即使是经验丰富的unix大师也存在陷阱。

另一种方法是编写自己的服务器守护程序,以root身份运行,侦听本地unix域套接字或命名管道,或者只是查找某个受保护目录中的文件。然后从您的php脚本中使用要添加的用户名向此守护进程发送消息。仅在此守护程序中实现最低限度的应用程序功能,以及php中的所有其他功能。但是在守护进程中进行强大的输入检查,清理你的环境等,确保它是php应用程序调用,而不是其他人。

答案 4 :(得分:-3)

Sudo需要以交互方式运行(它需要密码)

您不应以任何方式向Web服务器授予root访问权限。

Suexec是另一种选择,但您也可以让Web脚本写入文件并拥有一个解析文件并处理命令的cron作业