让PHP以ROOT权限执行系统命令的方法
分类:PHP作者:编程之家
用来作为解决PHP以root权限执行一些普通用户不能执行的命令或应用的参考。
其实PHP里的popen()函数是可以解决这个问题的,但是由于某些版本的linux(如我使用的Centos 5)对系统安全的考虑,
使得这个问题解决起来麻烦了好多。先来看一个网友使用popen()函数的例子。
<div class="codetitle"><a style="CURSOR: pointer" data="54011" class="copybut" id="copybut54011" onclick="doCopy('code54011')"> 代码如下:
<div class="codebody" id="code54011">
/
PHP中如何增加一个系统用户
下面是一段例程,增加一个名字为james的用户,
root密码是 louis。仅供参考
/
$sucommand = "su root --command";
$useradd = "/scripts/demo/runscripts.
PHP";
$rootpasswd = "louis";
$user = "james";
$user_add = sprintf("
%s %s",$sucommand,$useradd);
$fp = @popen($user_add,"w");
@fputs($fp,$rootpasswd);
@pclose($fp);
经过自己的测试,证实此段
代码是不能实现(至少在我的系统里是这样的)作者想要获得的结果的。经过自己很长时
间的google之后,
问题的关键是su root这个命令需要的密码必须以终端的方式输入,不能通过其它的方式(我也不知道还有没有其它的方式)获得。
又由于项目要求不能使用类似于sudo这种应用,无奈之下,我选择了网友提出的用编写C程序的
方法来
解决此问题。
首先写个C程序,命名为:run.c 放在目录/scripts/demo/下
<div class="codetitle">
<a style="CURSOR: pointer" data="45725" class="copybut" id="copybut45725" onclick="doCopy('code45725')"> 代码如下: <div class="codebody" id="code45725">
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
uid_t uid,euid;
//char cmd[1024]; //变量暂时未使用
uid = getuid() ;
euid = geteuid();
printf("my uid :%u\n",getuid()); //这里
显示的是当前的uid 可以注释掉.
printf("my euid :%u\n",geteuid()); //这里
显示的是当前的euid
if(setreuid(euid,uid)) //交换这两个id
perror("setreuid");
printf("after setreuid uid :%u\n",getuid());
printf("afer sertreuid euid :%u\n",geteuid());
sy
stem("/scripts/demo/runscripts.
PHP"); //执行脚本
return 0;
}