通過PHP執行系統命令

PS.這幾天用PHP寫了一個小工具,因爲要部署在Linux,又要暫時使用sudo執行一些Shell命令,網上也有很多資料,但是有的要麼就直接把Web服務器用戶直接提升權限,要麼就使用密碼存文件方式,安全性都不是特別好,好在搜索到在Wordpress上一位外國友人的文章,很實用,安全性也不錯,就把它翻譯過來和大家分享一下,下面是正文部分。


  許多時候我們需要在Linux系統上執行系統命令--比如來刪除一個目錄或者重啓服務。但是,因爲Apache並不是以root權限運行的,這樣使用PHP的exec()、system()或者passthru()函數來實現以上功能就變得不太可能。

  解決這個問題的方案是非常簡單的,特別是在Ubuntu上。Apache的用戶www-data需要獲得權限來使用sudo執行一些應用。

  1、執行命令

     

command sudo visudo

  2、在文件末尾,增加如下內容

   

www-data ALL=NOPASSWD: /sbin/iptables, /usr/bin/du

  假設你希望使用超級用戶(root)權限運行iptables和du命令。但是,如果你想使用超級用戶權限運行每一個應用,添加以下命令來代替上面的命令。  

   

www-data ALL=NOPASSWD: ALL

  3、就是這樣,現在像下面這種方式在你的php腳本中使用exec()函數

      

exec("sudo iptables -P FORWARD ACCEPT");
  這使我能夠在服務器上執行腳本,這個腳本我早先不得不使用setuid和聯合是否爲cron的方式。但是現在,PHP使這變得方便。

PS.

1、修改sudoers還有另外一種方式,使用 vi /etc/sudoers,在此之前要 sudo chmod u+w /etc/sudoers,獲取權限。

2、如果要讓PHP運行我們自己寫的腳本,我在Google上看到用這個方法也是可以的。例如:www-data ALL=NOPASSWD: /tmp/script.sh

     要寫明sh文件的具體位置

原文地址:https://exain.wordpress.com/2007/11/24/execute-system-commands-via-php/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章