我在 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
當您自己的用戶啟動時,原因可能有兩種可能的解釋:
- 您的個人資料中有
alias vcgencmd='sudo vcgencmd
,因此您會自動運行sudo
. vcgencmd
您對需要操作的文件有足夠的權限。如果您需要寫入存取權限,並且檔案由您所屬的群組擁有,並且對該群組具有寫入存取權限,那麼您將不需要 sudo。
總之,要么將命令更改為sudo vcgencmd version
.或找到你需要修改哪些檔案權限並進行修改。