我正在尝试用PHP构建防火墙管理器,但是当我执行 <?php exec('iptables -L'); ?>
时,结果数组为空。
我尝试了 <?php echo exec('whoami'); ?>
,响应是 www-data
(Apache正在使用的用户)。我该怎么做才能以root权限执行exec函数?(最好不要改变Apache用户。)
我正在尝试用PHP构建防火墙管理器,但是当我执行 <?php exec('iptables -L'); ?>
时,结果数组为空。
我尝试了 <?php echo exec('whoami'); ?>
,响应是 www-data
(Apache正在使用的用户)。我该怎么做才能以root权限执行exec函数?(最好不要改变Apache用户。)
不要这样做!这会让你变得极其容易受到各种恶意黑客攻击。
可以查看“sudo”文档。
你应该能够设置所有需要的命令为可通过"sudo"执行的脚本。 编写具有有限功能的特定脚本比暴露基础特权命令要好得多。
例如:
exec ('sudo getIpTables.ksh')
我知道这是一个老问题
如果用户php运行时还没有被分配到sudo组,请将其添加到该组中
使用sudo -S,这样你可以通过echo传递密码
$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'"
所以你会得到一个像登录 shell 一样并且已经设置好路径的新 bash
查看 sudo 的 man 手册页
你可以通过phpseclib,一个纯PHP SSH实现来运行sudo:
<?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]');
?>
我最近发布了一个项目,使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;
只是一个假设 - 这是一个将执行此操作的 PHP Web 应用程序吗?这听起来不太安全。需要 root 权限的应用程序 - 你能否将其单独构建,然后从 PHP 中调用它?如果不能,也许你可以使用 sudo 命令使该进程以 root 用户身份运行。