php使用root权限的方法

在linux下如果想要使用root权限执行命令,比较麻烦
网上大多说的是直接把webserver(apache、nginx)直接以root用户和组执行
试过apache下用root执行,但是已启动就报错
没去深究,我用的是提权的方法,将要执行的命令通过一个小程序来调用
小程序的代码如下

/**************************************
*本工具可用于php页面调用其他程序的功能
*生成可执行文件之后,需要chmod a+s 改变程序权限
**************************************/
#include 
#include 
#include 
#include 
#include 
 
int main(int argc, char *argv[])
{
	uid_t uid,euid;
	uid_t gid,egid;
 
	uid = getuid();
	euid = geteuid();
	gid = getgid();
	egid = getegid();
	//printf("%u %u\n",uid,euid);
	//printf("%u %u\n",gid,egid);
 
	if(setreuid(euid, uid))
	{
		printf("setreuid return true.");
		perror("setreuid");
	}
	if(setregid(egid, gid))
	{
		printf("setregid return true.");
		perror("setregid");
	}
 
 
	std::string cmd;
	// 大于号、小于号、and号乱码
	for(int i = 1; i《argc; ++i)
	{
		cmd += argv[i];
		cmd += " ";
	}
	cmd += "2》&1";
 
	system(cmd.c_str());
 
	return 0;
}

用g++生成之后,需要chmod a+s 做一下uid和gid绑定
假设生成runcmd的程序:

g++ main.cpp -o runcmd
chown root.root ./runcmd
chmod a+s ./runcmd

在php页面就可以用这样子来执行

//例如在路径正确情况下,查看home目录
 
// 这样子会报错的
system('ls -a /home/*', $retval);
 
// 用这个代替
system('./runcmd ls -a /home/*', $retval);
你可以留言,或者trackback 从你的网站

One Response to “php使用root权限的方法”

  1. ice mold 说道:

    不错,我要转载一下。

留言哦