首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 執行 Linux 指令權限不足解決方案:sudoers 設定實戰

     編輯:PHP 綜合知識

解決 PHP (Apache 用戶) 執行需 root 權限的 Linux 指令問題,透過 visudo 設定免密 sudo 與指令白名單。

問題現象

exec("sudo /usr/local/yourcmd/sbin/yourcmd -t -f {$conf_file}", $out);
// 回傳:Array ( [0] => sudo: no tty present and no askpass program specified )

解決步驟

  1. visudo 編輯 sudoers
  2. 註釋 Defaults requiretty(允許無 tty 環境執行 sudo)
  3. 新增 Apache 免密權限與指令別名:
    apache ALL=(ALL) NOPASSWD: ALL
    Cmnd_Alias YOURCMD = /usr/local/yourcmd/sbin/yourcmd
  4. 驗證:exec("sudo /usr/local/yourcmd/sbin/yourcmd -t -f {$conf_file}", $out) 成功回傳指令輸出

安全性建議

  • **僅白名單指令**,避免 NOPASSWD: ALL 暴露風險
  • 生產環境建議建立專用系統用戶替代 apache
  • 指令路徑使用絕對路徑,防止 PATH 劫持
  • PHP 端嚴格驗證傳入參數,防止指令注入

替代方案

  • 將需 root 的操作封裝為 systemd service,PHP 透過 socket/IPC 觸發
  • 使用 setcap 賦予執行檔特定 capability(如 cap_net_bind_service)
  • 隊列系統:PHP 寫入任務表,root 守護程式輪詢執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved