php利用root权限执行shell脚本 (转)

转一篇博客,以前搞这个东西搞了很久,结果今天晚上看到了一篇救命博客,瞬间开心了。。。转载转载php

利用sudo来赋予Apache的用户root的执行权限,下面记录一下:html

利用PHP利用root权限执行shell脚本必须进行如下几个步骤:(全部步骤都是我亲自实验,如有不妥可指出,谢谢!)linux

1. 肯定一下你的Apache的执行用户是谁。注:不必定就是nobody,我自行安装的httpd,个人Apache的用户就是daemonshell

2. 利用visudo为你的Apache执行用户赋予root执行权限,固然还有设置无密码。注:为了安全起见,这里最好是新建一个用户,让他做为Apache的执行用户便可(修改httpd.conf文件,后面我会指出)apache

3. 这步就简单了,编写你的脚本,利用php的exec,system...函数来执行。安全

接下来就是详细的实现过程:函数

1. 查看一下你的Apache的执行用户是谁: lsof -i:80         运行以后的结果为:工具

从图中咱们能够清楚的看到,httpd(也就是Apache)的执行用户为:exec_shell(注:这是我本机上改过以后的用户,只是用来讲明一下,你的确定不是这个!)  spa

lsof 就是 List of file 的缩写,就是列出当前系统打开文件的工具,关于他具体的使用方法可参考:http://club.topsage.com/thread-234763-1-1.html   说的比较不错.net

肯定了你的Linux上Apache的执行者是谁,下面为了安全起见,新建一个用户将Apache的执行用户修改成咱们新建的用户。

2. 新建Apache的执行用户

    useradd your_exec_user  咱们知道建立用户的时候都会默认建立一个用用户名一样的用户组,也就是说如今咱们也有一个your_exec_user的用户组

    下面咱们修改一下Apache的配置文件,使它的执行用户改成咱们刚才新建的这个用户your_exec_user :

     vi  /home/houqingdong/httpd-exe/config/httpd.conf(这个是你的Apache所在的目录位置)

    找到下面的地方,修改成你新建的用户:your_exec_user

从新启动Apache:   /home/houqingdong/httpd-exe/bin/apachect1  restart              -------------> 重启完以后你能够利用:lsof -i:80 查看一下。

3. 执行visudo(或者是 vi /etc/sudoers) , 为your_exec_user赋予root权限,而且不须要密码,还有一步重要的修改(我被困扰的就是这个地方)

    visudo    找到这个地方,添加your_exec_user,而且设置无需密码

我以前的时候,作完这里就去执行php脚本去了,结果一直建立不成功,并且很郁闷的是我切换到your_exec_user用户下直接执行是能够执行成功的。    后来,查看了一下Apache的日志文件,发现:

这里明显看出,在执行sudo的时候说必需要有一个tty去运行sudo , 知道问题出在哪里问题就好解决了: vi /etc/sudoers   将下面的这句注释掉:     

这是由于默认的状况下,执行sudo须要一个终端,这里注释掉就能够了。接下来,写你的shell脚本和php命令吧。

ok!就是上面这个博客,完美的解决了没法运行shell脚本的问题!

相关文章
相关标签/搜索