网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > PHP > 正文
让PHP以ROOT权限执行系统命令
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/12/07
下载{$ArticleTitle}原创论文样式

  通常apache是以一个一般用户来运行的(像在我自己的Linux上, apache的用户名是wwwrun, 组是www). 但有时候我们可能会遇到要让PHP以ROOT权限来执行命令的情况. 比如说, 执行chown, chmod等命令来改变某个文件的权限或用户. 如果这个文件不是通过PHP创建的(也就是说文件的用户不是wwwrun, 而是root或者别的用户), 那我们必须要有ROOT权限才能成功执行chown或chmod命令.

  PHP里有一个函数:popen. PHP手册上对这个函数的解释是:

  Opens a pipe to a process executed by forking the command given by command.

  Returns a file pointer identical to that returned by fopen().

  This pointer may be used with fgets(), fgetss(), and fwrite().

  也就是说, 我们可以对popen的返回值进行读写操作, 就像fopen返回的文件句柄一样.

  在LINUX下以ROOT权限执行某个命令的格式是:

  su --login root --command 'chmod 644 /lab/cmd.php'

  综合以上, 下面的代码就可以让PHP以ROOT权限执行命令:

<?php
  $su = "su --login root --command 'chmod 644 /lab/cmd.php'";
  $root = "iamroot";
  $fp = @popen($su, "w");
  @fputs($fp, $root);
  @pclose($fp);
?>

  当然, 如果/lab/cmd.php这个文件本身就是通过PHP创建的, 那就不用这么麻烦了. 直接执行PHP里的函数chmod就可以了. 这里是假设/lab/cmd.php是别的用户创建的, 我们要想通过PHP更改它的权限, 就必须要有ROOT权限才可以.

  在其他用户下su root 执行这个命令貌似要输入系统root密码的呀?

  [root@KOLtest test]# su dict

  [dict@KOLtest test]$ su --login root --command 'chmod 644 /opt/www/test/cmd.php'

  Password:

  写成php文件 在Web中调用也无法改变 /opt/www/test/cmd.php 的权限为 644 还是原来用root设置的600,是我哪里设置的问题吗?

  可是我记得su root 一般都有交互的输入密码的 好像无法避免

  使用POPEN就是为了可以交互哦. 代码中的$root 就必须是root用户的密码.

<?php
  $su = "su --login root --command 'chmod 644 /lab/cmd.php'"; //用文件的绝对路径
  $rootpassword = "iamroot"; //root用户的密码
  $fp = @popen($su, "w");
  @fputs($fp, $root);
  @pclose($fp);
?>

(责任编辑:admin)

  • 下一篇资讯: PHP正则相关的几个函数
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号