標籤:net 修改 密碼 sudoers list 並且 ops 結果 restart
轉一篇部落格,之前搞這個東西搞了好久,結果今天晚上看到了一篇救命部落格,瞬間開心了。。。轉載轉載
利用sudo來賦予Apache的使用者root的執行許可權,下面記錄一下:
利用PHP利用root許可權執行shell指令碼必須進行以下幾個步驟:(所有步驟都是我親自實驗,若有不妥可指出,謝謝!)
1. 確定一下你的Apache的執行使用者是誰。註:不一定就是nobody,我自行安裝的httpd,我的Apache的使用者就是daemon
2. 利用visudo為你的Apache執行使用者賦予root執行許可權,當然還有設定無密碼。註:為了安全起見,這裡最好是建立一個使用者,讓他作為Apache的執行使用者即可(修改httpd.conf檔案,後面我會指出)
3. 這步就簡單了,編寫你的指令碼,利用php的exec,system...函數來執行。
接下來就是詳細的實現過程:
1. 查看一下你的Apache的執行使用者是誰: lsof -i:80 運行之後的結果為:
我們可以清楚的看到,httpd(也就是Apache)的執行使用者為:exec_shell(註:這是我本機上改過之後的使用者,只是用來說明一下,你的肯定不是這個!)
lsof 就是 List of file 的縮寫,就是列出當前系統開啟檔案的工具,關於他具體的使用方法可參考:http://club.topsage.com/thread-234763-1-1.html 說的比較不錯
確定了你的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指令碼的問題!
php利用root許可權執行shell指令碼 (轉)