在Linux上PHP沒有權限執行exec命令的解決方法

相關官方參考資料

PHP exec Linux sudoers file Sudo Commands

在fastcgi模式下運行時的修改方式

當PHP在fastcgi模式下運行時,它的權限繼承自它的宿主程序。我們以apache為例進行講解。首先我們需要找到apache運行的賬戶,然後使用vi或者vim編輯/etc/sudoers文件,在文件中增加下面參考示例中的內容。下面內容中先用ps命令查找apache的進程httpd,看返回結果最左邊的賬戶信息,然後編輯sudoers文件,加入對apache賬戶的授權。

            ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
        

在php-fpm模式下運行時的修改方式

在php-fpm模式下運行時,它是以獨立進程運行的。所以我們先找到它的運行賬戶,然後跟上面一樣進行授權操作。

            ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
        

驗證修改是否生效

經過上述操作,我們修改了授權,但是還並沒有生效,我們需要對服務經行重啟操作才能使我們的修改生效。根據我們的實際情況,把apache或php-fpm的服務重啟。然後執行exec命令查看返回結果,如果正常獲得返回結果則成功了。

            exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);