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腳本的問題!

相關文章
相關標籤/搜索