1. 程式人生 > >在php中使用 exec/ system/passthru/shell_exec 爬過的坑

在php中使用 exec/ system/passthru/shell_exec 爬過的坑

問題描述

         在命令列中執行一個php/py檔案,沒有問題。

         當在php框架中用exec等函式呼叫外部命令時,發現怎麼也得不到想要的內容,各種奇葩返回。

解決過程

         經檢視,執行php時使用者為www-data,許可權過低,無法操作。

public function testtest(){
	    echo exec('whoami');die;
}

         www-data是預設執行web服務的使用者/組,一般在通過apt安裝web服務程式時生成。搭建web服務的資料夾/檔案一般要設定成www-data的。

解決方法:

          1.sudo su               切換到root

          2.chmod u+w /etc/sudoers            賦予/etc/sudoers檔案可寫許可權

          3.vim /etc/sudoers                 編輯sudoers檔案                       

root    ALL=(ALL:ALL) ALL
www-data      ALL=(ALL)       NOPASSWD:ALL

          4.chmod u-w /etc/sudoers           去除/etc/sudoers檔案可寫許可權