mysqlroot权限:让PHP以ROOT权限执行系统命令

  通常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 poer identical to that ed by fopen.

  This poer 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);
?>


Tags:  获得root权限 linuxroot权限 root权限 mysqlroot权限

延伸阅读

最新评论

发表评论