我有一个包含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 \ \-\"
答案 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