如何以root身份运行PHP exec()?

31 php unix security shell

我正在尝试用PHP构建防火墙管理器,但是当我执行时<?php exec('iptables -L'); ?>,结果数组是空的.

我试过了,<?php echo exec('whoami'); ?>响应是www-data(Apache正在使用的用户).如何以root身份执行exec函数?(最好不要更改Apache用户.)

Jam*_*son 34

不要这样做!你会对各种各样的恶意hackery敞开大门.

看看"sudo"文档.

您应该能够将所需的所有命令设置为"sudo"脚本.编写具有有限功能的特定脚本比暴露底层特权命令要好得多.

如:

exec ('sudo getIpTables.ksh')
Run Code Online (Sandbox Code Playgroud)

  • Sudo是我遇到类似问题时使用的解决方案.这些SO问题可作为有用的参考:http://stackoverflow.com/questions/113728/php-webpage-doesnt-launch-unix-command-even-after-updated-sudoers http://stackoverflow.com/questions/349884 /怎么办-I-编程重启-A-系统servicenot的Apache从 - 阿帕奇功能于丽努 (2认同)

小智 13

您可以通过phpseclib运行sudo ,这是一个纯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]');
?>
Run Code Online (Sandbox Code Playgroud)


小智 9

我知道这是一个老问题

将用户php运行添加到sudo组(如果尚未分配)

使用sudo -S,所以你可以通过echo传递密码

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

如果您遇到路径问题 - 请使用

"bash -lc 'echo your_passwd | /usr/bin/sudo -S your command'"
Run Code Online (Sandbox Code Playgroud)

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

查看sudo的手册页


Fru*_*ner -2

只是一个假设 - 这是一个可以执行此操作的 PHP Web 应用程序吗?这听起来不太安全。需要 root 的应用程序 - 您可以单独构建它,然后从 PHP 调用它吗?如果没有,也许您可​​以 sudo 该进程,以便它可以以 root 身份运行。