注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

不透明的雾的博客

人生是一次记忆的旅行

 
 
 

日志

 
 
 
 

[LAMP] 让 PHP 执行 root 权限的指令 转  

2010-03-18 09:43:09|  分类: 文摘 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

今天下午 Mito 在 QQ上问我如何用 PHP 执行系统指令,还要 root 权限,原来是他们老板要管理员通过 Web 修改系统时间日期……无语中,这个要求真 TMD 变态。

不过这个问题我也不会,测试一下重定向和管道技术把密码发给 su 指令,提示信息是:

su: must be run from a terminal

不过想想也是正常,安全问题嘛,小心为好。不过还是不死心,搜索了一下解决方法。

其中让 PHP 执行系统命令有以下几种方法:

  1. string system (string command [, int return_var]);
  2. string exec (string command [, string array [, int return_var]]);
    (以上两个傻子都知道)
  3. void passthru (string command [, int return_var]);
    这个有点新鲜,说明是:passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
    实例:
    1. <?php
    2. header("Content-type: image/gif");
    3. passthru("./ppmtogif hunte.ppm");
    4. ?>
  4. 用“`”符号,这个……估计呆子也能知道,居然那个网站还觉得是秘籍……汗ing

最重要的,也是解决 root 权限的方法,就是使用 popen() 函数打开进程。

原网站上说明如下:上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加 Linux 的系统用户时,要调用 su 来把当前用户换到 root 才行,而 su 命令必须要在命令行上输入 root 的密码。这种情况下,用上面提到的方法显然是不行的。popen() 函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在 PHP3 中,对这种句柄只能做单一的操作模式,要么写,要么读;从 PHP4 开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用 pclose() 函数来关闭它。

实例:

  1. <?php
  2. /* PHP中如何增加一个系统用户
  3. 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 */
  4. $sucommand = "su --login root --command";
  5. $useradd = "useradd ";
  6. $rootpasswd = "verygood";
  7. $user = "james";
  8. $user_add = sprintf("%s "%s %s"", $sucommand, $useradd, $user);
  9. $fp = @popen($user_add, "w");
  10. @fputs($fp, $rootpasswd);
  11. @pclose($fp);
  12. ?>
  评论这张
 
阅读(151)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017