TShopping

 找回密碼
 註冊
搜索
查看: 1009|回復: 0
打印 上一主題 下一主題

[分享] PHP 透過 Sudo 執行 root 指令

[複製鏈接]
跳轉到指定樓層
1#
發表於 2020-9-8 12:23:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
一直以來要用 PHP 以 root 身份執行系統管理工作的問題,就是 PHP 會以 apache 的身份執行,解決方法有安裝 suPHP 或 super 這類工具,但個人認為還是 Sudo 較為安全。首先要安裝 Sudo,據我所知 RHEL, Ubuntu 已經內置,Debian 只要用 apt-get 安裝就可以:FreeBSD 安裝 Sudo
  1. # cd /usr/ports/security/sudo
  2. # make && make install
複製代碼


CentOS 7 內建 Sudo所以不需要額外安裝

當系統有 Sudo 後,基於安全理由,不要直接編輯組態檔 /etc/sudoers,改用 visudo 來做編輯。visudo 為防止多個使用者同時修改,它會先鎖住 /etc/sudoers,並且確保組態檔的文法正確,一旦發現錯誤會拒絕儲存動作。

假如你的 Apache 的執行身份為 apache,而想透過 PHP 重新啟動 DNS server,用 root 輸入指令 visudo,便會用 vi 開啟 /etc/sudoers,在檔案最底加上以下一行:

  1. apache ALL=NOPASSWD:/etc/rc.d/init.d/named
複製代碼


儲存後可以在 PHP 以 root 身份執行 /etc/rc.d/init.d/named,包括開啟、停止及重新啟動:

  1. <?php
  2. // 開啟 named
  3. $output = shell_exec("/usr/bin/sudo /etc/rc.d/init.d/named start");
  4. echo $output;
  5. ?>

  6. <?php
  7. // 開啟 named
  8. $output = shell_exec("/usr/bin/sudo /etc/rc.d/init.d/named start");
  9. echo $output;
複製代碼

?>


上面的 /usr/bin/sudo 是 sudo 的可執行檔,需要根據自己的安裝目錄進行修改。以上只是個簡單的例子,你可以根據你的需要執行其他管理動作,但如果 web server 是多人共用,那麼在使用 Sudo 時要加倍小心。



文章出處:網頁設計,網站架設 ,網路行銷,網頁優化,SEO - NetYea 網頁設計

參考文章

 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-20 06:25 , Processed in 0.073058 second(s), 23 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表