1.第一点就是注意写上命令的完整路径:
比如调用adb命令:
$test="/home/wxl/platform-tools/adb devices";
echo shell_exec($test);
2.第二点就是注意看apache所在用户组具不具有执行权限:
比如调用iptables命令(需要root权限):
2.1先编译一个可执行文件cmd.cpp,使得当前用户可以执行root权限命令:
#include
#include
#include
#include
#include
#include
using namespace std;
int main(int ac,char
**argv) // 获取iptables命令参数
{
string get("");
for(int i=1;i
string temp(argv[i]);
get+=" ";
get+=temp;
}
string
cmd=get; //命令字符串
cout<
0"<
setuid(0); //将当前用户的uid设置为0
(root用户的uid为0),使其具有root权限
system(cmd.c_str()); //执行命令
cout<
0"<
}
编译:g++ -o cmd -Wall cmd.cpp
2.2再修改cmd文件的权限问题:
ls -al查看cmd的权限:
-rwxr-xr-- 1 root root 8465
Dec 2 16:10 cmd
注意两个地方,第一个:chmod u+s cmd(使得群组里面的用户可以以root权限调用cmd)
第二个地方:chown :www-data(修改群组,把群组改为apache所在群组)
其中,查看群组命令:ps -ef | grep apache
2.3在php中调用cmd来执行root命令:
$cmdstr="iptables -L";
passthru("/var/www/cmd /sbin/iptables -L");
3.有关group和user的相关信息,请点击查看
===================多条shell命令的执行=============
4. 如下图所示:
然后修改tmp.sh脚本为可执行文件
最后执行shell脚本即可
注意:其中多条shell命令写在一起,用n换行符隔开每一条命令。千万不能直接用回车符。
5.要实现sudo命令,就需要给该用户赋予root权限,切不需要输入密码。具体操作如下:
打开文件:vim sudo /etc/sudoers
在最后一行添加具有root执行权限的用户即可。