2011年1月12日 星期三

在php中使用root權限執行command line指令

php提供了3個function 分別是 system, exec, passthru讓我們可以直接對系統下command指令,這3個function有什麼差別請自己google。

通常php在執行command line指令的時候是取決於apache的權限,所以理論上只要提高apache的權限,就可以了,不過這只是理論上= =",實作的時候不知道為什麼,還是會有權限不足的狀況,明明可以讀寫檔案了,但是要執行某個程式去控制這些檔案的時候還是會出錯,google了很久,找到3種解法。


1.使用popen function
使用此function可以用su指令切換使用者身分,而且可以填入密碼,不過某些程式還是不能執行,失敗。
2.安裝一個叫做super的套件,此套件會幫php取得root權限
直接讓php取得root權限,感覺很危險
3.給apache不用密碼的sudo權限
此方式感覺也是挺危險的...不過是目前最簡單的解法,只好用這個了...
 以下介紹如何給予apache sudo權限


1.先在php上執行system(“id”),確定php使用的身分
2.使用root將/etc/sudoers先改成可寫入的權限
3.修改/etc/sudoers 把Defaults requiretty註解掉(非常重要,不註解可能造成某些指令無法執行)
4.最後一行加入your_id     ALL=(ALL)   NOPASSWD: ALL
5.記得把權限改回來

這樣php就可以直接使用sudo指令了...

沒有留言: