將 www-data 新增至 /etc/sudoers 無法讓 PHP shell_exec() 執行命令

將 www-data 新增至 /etc/sudoers 無法讓 PHP shell_exec() 執行命令

我在 Raspberry Pi 上的 Raspbian(基於 Debian)上運行網頁伺服器 lighttpd。伺服器以使用者 www-data 運作(用 進行檢查ps aux)。我新增了以下行/etc/sudoers

www-data ALL=NOPASSWD:/opt/vc/bin/vcgencmd

能夠vcgencmd從 Raspberry Pi 運行該工具,該工具從 PHP 檔案中提供狀態信息

<? echo shell_exec('vcgencmd version'); ?>

它打印的只是“VCHI 初始化失敗”(而不是當我在用戶上運行它時出現的假定版本信息,即使沒有sudo),當 vcgencmd 以錯誤的權限運行時出現。

以跑步為例

<? echo shell_exec('cat /sys/class/thermal/thermal_zone*/temp'); ?>

無需任何/etc/sudoers更改即可正常工作,因此 PHP 沒有問題(例如禁止shell_exec或其他問題)。

為了執行指令還需要設定什麼?

答案1

如果你想使用你添加的東西/etc/sudoers,你必須打電話sudo

sudo只是一個設定了 setuid 位元的程式。它絕對沒有什麼特別之處,這意味著它不會在每次啟動程序時進行幹預。

您可以調用的原因cat /sys/class/thermal/thermal_zone*/temp是您對這些文件具有讀取權限。根據檔案系統權限的設定方式,您可能具有讀取權限,但不一定具有寫入權限。

vcgencmd version當您自己的用戶啟動時,原因可能有兩種可能的解釋:

  1. 您的個人資料中有alias vcgencmd='sudo vcgencmd,因此您會自動運行sudo.
  2. vcgencmd您對需要操作的文件有足夠的權限。如果您需要寫入存取權限,並且檔案由您所屬的群組擁有,並且對該群組具有寫入存取權限,那麼您將不需要 sudo。

總之,要么將命令更改為sudo vcgencmd version.或找到你需要修改哪些檔案權限並進行修改。

相關內容