快捷搜索:

让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 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权限履行敕令:

当然, 假如/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用户的密码.

您可能还会对下面的文章感兴趣: