如何运行PHP的exec()的根?(How to run PHP exec() as

2019-08-22 13:58发布

我试图建立一个PHP防火墙管理员,但是当我执行, <?php exec('iptables -L'); ?> <?php exec('iptables -L'); ?> ,结果数组为空。

我曾尝试, <?php echo exec('whoami'); ?> <?php echo exec('whoami'); ?> ,并且响应是www-data (Apache是否使用用户)。 我能做些什么来执行exec函数的根? (优选地,在不改变Apache用户)。

Answer 1:

不这样做! 你将自己放任自由,对各种恶意两轮牛车的。

看看在“命令”的文档。

您应该能够建立你需要的“命令”能够脚本的所有命令。 这是更好的写功能有限的特定的脚本,而不是暴露底下priviledged命令。

如:

exec ('sudo getIpTables.ksh')


Answer 2:

您可以通过执行sudo phpseclib,纯PHP SSH实现 :

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

$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username', 'password');

$ssh->read('[prompt]');
$ssh->write("sudo command\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>


Answer 3:

我知道这是一个老问题

在添加用户PHP运行到须藤组如果尚未分配

使用sudo -S,这样你就可以通过回声通过密码

$exec = "echo your_passwd | /usr/bin/sudo -S your command";
exec($exec,$out,$rcode);

如果你有路径的麻烦 - 使用

"bash -lc 'echo your_passwd | /usr/bin/sudo -S your command'"

所以你得到一个新的bash行为像登录shell,并设置路径

检查须藤的手册页



Answer 4:

这是非常不安全的,一个坏主意。 重新考虑你的设计。 如果你真的想这样做,使用sudo把作为建议。 另一种解决方案可能是继续前进,以root身份运行,但这样做的一个chroot或VM映像(两者都可以被折了,但仍然)内。

或者,最重要的是作为一个chroot内部运行sudo的!



Answer 5:

除非你使用suphp并配置它以root身份运行,你将无法代表除了谁是运行PHP任何其他系统用户的身份运行任意PHP脚本。

编辑:

只是一个小想法。 添加队列过程以某种方式和运行的cron在根的crontab过程。

请请非常小心这一点。 任何注射可以从字面上破坏系统。



Answer 6:

你可以把所需的命令在一个单独的脚本/可执行文件(SH,PHP,一个真正的可执行文件,无所谓),改变其所有者为root,并申请“的setuid”给它。

这将允许任何东西,任何人都可以运行该脚本的根,所以你需要确保它有它自己的安全规则,看是否这是允许的,并且在它的作用是非常有限的。



Answer 7:

我最近出版的一期工程,使PHP获得和一个真正的Bash shell互动。 在这里获得: https://github.com/merlinthemagic/MTS

下载后,你会简单地使用下面的代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('iptables -L');
//the return will be a string containing the return of the command
echo $return1;


Answer 8:

只是一个假设 - 这是一个PHP的Web应用程序,将做到这一点? 这听起来不是很安全。 需要根的应用程序 - 你可以建立一个独立,然后从PHP调用它? 如果没有,也许你可以sudo的过程,因此它可以以root身份运行。



文章来源: How to run PHP exec() as root?