php循环权限,php以root权限执行的解决方案之一

这种问题我想大家可能都遇到过,网友提供的解决方法也很多。我也只是结合自己系统的需求并结合网友的解决方案来总结的一种方法

用来作为解决php以root权限执行一些普通用户不能执行的命令或应用的参考。

其实php里的popen()函数是可以解决这个问题的,但是由于某些版本的linux(如我使用的Centos 5)对系统安全的考虑,

使得这个问题解决起来麻烦了好多。先来看一个网友使用popen()函数的例子。

/* 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/下

#include

#include

#include

#include

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());

system("/scripts/demo/runscripts.php"); //执行脚本

return 0;

}

编译该文件:

gcc -o run -Wall run.c

在该路径下生成run文件,这个可执行文件。如果现在�

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值