在php中以root身份运行shell脚本?

时间:2012-05-09 19:17:03

标签: php

我正在尝试编写一个php脚本来将用户添加到LDAP。为此,我有一个shell脚本,名为“addldapuser.sh”,它将接受用户/屏幕名称/密码组合并将它们添加到LDAP。此脚本正常工作。我们希望用户能够在Web表单上输入他们的信息,然后将调用所述脚本并将用户正确地添加到LDAP。 addldapuser脚本当前需要以root身份运行,虽然我知道安全问题,但可以稍后处理它们。我已经尝试了所有我能想到或发现的东西,给了我能想到的所有许可,给了我可以根除的一切,用Apache捣乱了一段时间,现在我没有想法。

$scrName = $_POST['screenname'];
$usrName = $_POST['username'];
$pass = $_POST['password'];

if (isset($_POST['submit']))
{
    $out =  nl2br(shell_exec("sudo /EasyLDAP/old_scripts/addldapuser.sh " . $usrName . " " . $scrName . " " . $pass));

}

再一次,我知道这只是一个可怕的,可怕的想法,可以保证黑客永远摧毁我们所有人,但我的老板希望我至少让它以这种方式运作。

我知道我们至少应该对输入进行消毒处理,并在适当的时候进行处理。

2 个答案:

答案 0 :(得分:1)

我建议创建一个守护程序,该守护程序将作为root运行,并将与在用户级运行的脚本进行通信。

你可以做非常简单的python rpc服务器(例如内置的XML-RPC)和客户端作为粘合剂,将其中一个作为服务器和root运行,另一个作为客户端脚本运行。

然后,php代码将执行带有所需参数的python脚本,然后可以与python服务器脚本进行通信。

作为一项好处,如果您很好地完成服务器部分,您将获得潜在的安全性。我选择python作为一种内置大部分功能并且使用起来非常简单的语言。

示例:

服务器 - http://docs.python.org/library/simplexmlrpcserver.html#simplexmlrpcserver-example

客户 - http://docs.python.org/library/xmlrpclib.html#example-of-client-usage

或者,如果您坚持使用php,则可以将服务器进程作为php daemon运行,并通过类似的RPC方式连接到它。

答案 1 :(得分:1)

我最近发布了一个允许PHP获取真实Bash shell并与之交互的项目,您可以轻松地获取带有root的shell。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);

$strCmd = "/EasyLDAP/old_scripts/addldapuser.sh " . $usrName . " " . $scrName . " " . $pass;
$return1  = $shell->exeCmd($strCmd);

echo $return1;// return from your script