通过php以root身份运行命令

时间:2012-09-08 07:27:13

标签: php apache sudo su

我有一个包含su的php脚本。当我在shell中运行它时,它要求root密码并且运行良好。但现在我想为它制作一个界面。如你所知,php-apache中的所有命令都以www-data用户身份运行,并且该用户没有指定密码或者它不在sudoers中。所以我不能使用“echo pass | sudo -S ...”,因为我不知道什么是www-data的密码,并且在每个服务器上设置www-data的密码都不符合逻辑,或者在sudoers + nopass中添加它是吗?

您可以建议什么解决方案来解决这个问题?

我的一个命令:

su -c \"/usr/sbin/dmidecode -s baseboard-serial-number | tr \  \-\"

2 个答案:

答案 0 :(得分:2)

phpseclib应该是最佳的库选择,因为它不需要任何额外的扩展。

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('example.com');
if (!$ssh->login('user', 'pass')) {
    exit('Login Failed');
}

echo $ssh->exec('whoami');
echo $ssh->exec('pwd');
?>

另一个替代方案是libssh2,但它必须单独编译,并且众所周知difficult来设置/使用。

答案 1 :(得分:0)

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

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

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

$strCmd = "\"/usr/sbin/dmidecode -s baseboard-serial-number | tr \  \-\"";
$return1  = $shell->exeCmd($strCmd);

echo $return1;// return from your command