簡體   English   中英

php 帶有 sudo 命令的 shell_exec 不起作用

[英]php shell_exec with sudo commands not working

我在 (/opt/lampp/htdocs/xampp/test.php) 中創建了一個包含代碼的文件 test.php

$data = shell_exec("sudo php -v"); 
var_dump($data);

但它給了我結果NULL

我正在使用 PHP 5.6.11-1ubuntu3.1 (cli),所以我也在 /etc/sudoers 文件中添加了行

www-data ALL=NOPASSWD: /opt/lampp/htdocs/xampp/test.php

我也嘗試過添加

www-data ALL=NOPASSWD: ALL

但似乎沒有任何效果。 請幫忙

  • 編輯sudoers文件(使用visudo ),並添加一條規則,該規則允許Web服務器用戶無需密碼即可運行命令。 例如:

     www-data ALL=NOPASSWD: /path/to/script 

    這將允許該特定用戶在該特定腳本上調用sudo而不提示您輸入密碼。

  • 嘗試指定到PHP二進制文件的完整路徑.. /usr/bin/php ,如果你不知道它,使用找到它: which php

     $data = shell_exec("/usr/bin/php -v"); var_dump($data); 
  • 您還可以檢查php.ini限制可用命令集?

     ; When safe_mode is on, only executables located in the safe_mode_exec_dir ; will be allowed to be executed via the exec family of functions. ; http://php.net/safe-mode-exec-dir safe_mode_exec_dir = 

您應該更改mpm_itk模塊的最小uid / gid:

$ cat /etc/apache2/modules.d/00_mpm_itk.conf
<IfDefine MPM_ITK>
LoadModule mpm_itk_module modules/mpm_itk.so
#  LimitUIDRange 1000 2000
#  LimitGIDRange 1000 2000
  LimitUIDRange 0 2000
  LimitGIDRange 0 2000
</IfDefine>
sudo adduser USERNAME

sudo usermod -aG sudo USERNAME

如果您使用默認憑據登錄,則需要在 ubuntu 中創建一個新用戶,然后切換到新創建的用戶。

在這里你只需要用你的新用戶名替換 USERNAME

su - USERNAME

最后你可以使用 sudo 的每個命令

shell_exec('echo "yourpassword" | sudo -u yourusername -S | sudo --version')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM