您的位置:首页 > 运维架构 > Shell

通过web控制Shell脚本

2017-12-14 10:42 357 查看
最近在做一些系统部署方案,需要做一个web的安装和控制系统,但是web的权限不足以调用root才有权限执行的脚本,网上找了很多方案,最后选择了一些来实现,发现好像现在系统有些变化,不能直接坐到文章说法的效果了,自己改良了一下。

首先创建一个C++的文件:runcmd.c

#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string>
#include<exception>
#include<iostream>
using namespace std;
int main(int ac,char **argv)         // 获取命令参数
{
string get("su - root -c '");       //(1)命令首先执行使用root权限执行传进命令,不做这个处理的话,还是无法执行
for(int i=1;i<ac;i++){
string temp(argv[i]);
get+=" ";
get+=temp;
}
get+="'";
string cmd=get;    //命令字符串
setuid(0);  //将当前用户的uid设置为0 (root用户的uid为0),使其具有root权限,同时需要用(1)的步骤才能执行,否则web还是无法执行
system(cmd.c_str());          //执行命令
}


然后在系统中编译生成对应的命令:

g++ -o runcmd -Wall runcmd.c
chmod u+s runcmd


runcmd需要赋特殊权限,u+s,否则后面也是无法执行。

另外新版本php中默认不打开安全模式,所以安全模式问题暂时不考虑,但是还是需要修改php的配置文件,主要是把调用shell脚本的方法打开,就是修改php.ini中disable_function,把system,exec,shell_exec这几个方法去掉,重启php即可。

后面就是编写php文件,代码很简单:

<?php
$cmdstr="iptables -L";
system("/workdata/www/default/runcmd $cmdstr");   //调用cmd, 执行命令
?>


然后直接部署到服务器上,浏览器打开即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell c语言 web 脚本