最近写防火墙的WEB版,需要在PHP中调用linux系统命令,但是防火墙有关的执行都需要管理员权限才能执行。
在ubuntu下,Apache2的运行账户默认是www-data,默认是不能通过sudo来获得管理员权限的。查了一下,试了几种做法,搞定了。
#1 为了以防万一,要查一下apache的运行账户
<?php exec("whoami",$output,$result); print_r($output); ?>
运行一下,得到当前账户www-data
#2 给与www-data sudo权限,并且免密码
命令行输入: nano /etc/sudoers 或者 visudo
插入一行 www-data ALL=(ALL:ALL) NOPASSWD:ALL
如下图所示
#3 应用
<?php exec("sudo iptables-save",$output,$result); print_r($result); ?>
如上所示,即可在管理员权限下执行shell
需要注意的是,如上的操作会给服务器带来很大的安全隐患,因为www-data用户不需密码就可以提升到管理员权限。如果Apache被坏人拿下,那么服务器也就被人轻易的拿下了~~需慎重~~