以超級使用者身份啟動 FPM 池/反映 root 訪問權限
我正在用 PHP 建構一個 NAS 控制應用程序,它只能從本地網路訪問。
我將從 PHP-FPM 不允許使用 user 啟動它的池開始
root
,並且我還沒有找到強制它的方法。是的,是的,以 root 身份執行 PHP 並不安全(並且還建構了一個作業系統配置應用程序),但我不知道如何
/etc/rc.conf
直接從 PHP 中使用file_put_contents()
和之後編輯 Arch Linuxrc.d restart network
。我已經
open_basedir = /
進去了php.ini
。我已閱讀此內容,因此,我設置了一個 sudoer,使用相應的使用者和組啟動 PHP-FPM 池。
我的 sudoer 是系統使用者,添加了:
useradd -r -s /bin/bash -g wheel -d /srv/http/ systemphp
在 sudoer 配置中,我添加了以下條目:
systemphp stone=NOPASSWD: ALL
stone
是系統的實際主機名。問題是我必須這樣
sudo <everything>
做,但我不想將所有內容都基於shell_exec()
/exec()
。因為,這裡的任何選項都是一個選項,我仍然嘗試:
var_dump(shell_exec('sudo fdisk -l'));
那回來了
null
。在 PuTTY 中su systemphp
,sudo fdisk -l
返回實際列表的位置。沒有
shell_exec()
,以下程式碼將導致fopen(/etc/rc.conf): failed to open stream: Permission denied
:$handle = fopen('/etc/rc.conf', 'r+'); if ( $handle ) { while( ($buffer = fgets($handle)) !== false) { echo $buffer; } if ( !feof($handle) ) { echo 'Error: fgets() unexpectedly failed' . PHP_EOF; } fclose($handle); }
我將如何設置這樣的環境或至少反映它?
請不要建構編輯關鍵配置文件的 Web 界面。
相反,您可以建構一個 Web 應用程序,讓使用者修改此配置文件的副本或模板。然後代理或調度腳本實際上可以修改這個配置文件。
雖然我強烈同意這是一個壞主意,實際上你應該編輯一個臨時副本並讓其他東西複製它,如果你決定
rc.conf
直接編輯,創建一個組,systemphp
加入它,改變該組的組所有權rc.conf
並授予rc.conf
組寫入權限。這至少比
NOPASSWD: all
通過 sudoers 授予使用者權限要少得多。而且,這仍然是一個糟糕的主意。您可能看不到對系統造成傷害的方法,但要確保這一點非常困難。我什至可以說你不能。
rc.conf
是一個 bash 腳本,它的來源,祝你好運,照顧潛在的邊緣情況。順便說一句,我什至想不出任何對
rc.conf
這樣的改變有用的東西,特別是因為它是最新系統上的一個非常小的文件——基本上任何東西都可能在其他地方更合適地改變,或者改變在另一個文件中並告訴rc.conf
該文件的來源,如果它確實需要存在的話。