我正在尝试用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)
小智 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 身份运行。