讓 Apache 能夠在 PHP 作為 DSO 運行時寫入 PHP 檔案?

讓 Apache 能夠在 PHP 作為 DSO 運行時寫入 PHP 檔案?

我將 PHP 作為 DSO 運行。因此,我的安裝程式腳本(寫入設定檔)無法進行任何寫入。

如何賦予 apache(使用者:nobody)寫入檔案的能力?

答案1

我只會在安全環境中的開發伺服器上執行此操作。許多 PHP 應用程式都會在螢幕上產生文件,以便可以將其安全地複製到配置目錄。

chmod 777 .執行此操作的快速(且不安全)方法是從文件所在的目錄執行。在執行此操作之前,請執行ls -ld .以取得您將要設定回的權限。在某些情況下,所需的目錄不存在,因此您需要先建立它。寫入設定檔後,立即將目錄重設為其原始權限。正確的命令可能是chmod 755 .chmod 750 .目錄運行的。使用 ls 指令進行驗證。

變更設定檔的權限,使 Apache 無法再寫入 ( chmod o-w configfile)。應用程式通常附帶範例設定檔。將其中一個放在配置目錄中並進行編輯可能是更好的方法。這要求您學習並理解配置選項。您可以使用線上配置腳本來幫助您進行編輯。

答案2

您可以將設定檔寫入暫存目錄,例如/tmp/config/.然後,您可以執行 shell 腳本將設定檔複製到/tmp/config/所需位置。

若要授予所需的權限,您可以將使用者新增nobody至 sudoers 檔案。該條目應如下所示:

nobody   ALL=NOPASSWD: /path/to/your_script.sh

shell腳本(不要忘記新增執行權限)。

cp -r /tmp/config/* /desired/path/to/config

在 PHP 中,您需要一個小程式碼片段,例如:

<?php
$output = shell_exec('sudo /path/to/your_script.sh');
echo "$output";
?>

答案3

在共享環境中,當涉及安全問題時,一切都會變得有點複雜。透過將檔案所有權變更為“nobody”,您可以授予Apache 對該檔案的寫入存取權限,但是,如果PHP 模組沒有設定將每個虛擬主機限制為其自己的目錄,那麼它也會授予其他人對該文件的存取權限。檢查它在您的環境中的設定方式。

Apache 通常以使用者「nobody」和群組「nobody」運行,因此您也可以使用群組權限。將檔案的群組變更為“nobody”並將權限設為 664。

如果您無法變更檔案的擁有者或群組,FTP 通常允許您變更權限。假設 Apache 不是擁有該文件的使用者/群組之一,您必須將其設定為 777,這是非常不安全的,但這完全取決於您所處的環境類型。應用程式並將其更改回644 或444(只讀)。

答案4

這是使用 cPanel 作為 DSO 來運行 PHP 的典型問題,但它也適用於其他設定。

執行此方法時,PHP 進程會由執行 httpd 的使用者處理。在大多數情況下,該用戶是「無人」用戶。這意味著當 PHP 與檔案系統上的檔案互動時,「nobody」使用者必須可以存取它們。這會產生權限問題,因為如果沒有正確的權限更改,基於 cPanel 的普通使用者將無法存取「nobody」使用者擁有的 RW(讀取/寫入)檔案。大多數 PHP Web 應用程式/腳本需要寫入檔案和目錄,如果它們由 cPanel 使用者擁有,而不將檔案/目錄的權限更改為 777,則會導致問題,在某些情況下,會破壞您的網站。

因此,在這種情況下,您只能手動管理權限,將它們設定為 777

執行此 PHP 方法時,您必須手動管理每個使用者的權限,以確保您的 PHP 應用程式/腳本可以讀取和寫入其需要執行的檔案和目錄。

或者,更好的是,如果您可以遷移到 Mod_SuPHP 並且沒有效能問題(因為 DSO 更快),您將能夠以執行 cPanel 的使用者身分執行 PHP。

如果我們忽略透過 DSO 運行 PHP 時可能遇到的權限問題,那麼與 SuPHP 相比,它有一些好處。首先是速度。 Mod_PHP 比 Mod_SuPHP 更快。這主要是因為 Mod_SuPHP 處理的每個請求都被包裝為以擁有檔案的使用者身分執行。這在流量較低的網站上可能不太明顯,但在流量較高的網站上,它會很快增加。第二個是 PHP optcode 快取附加功能的完整功能,例如 eAcclerator、APC 和 Xcache。為了充分發揮 PHP optcode 快取的優勢,您需要一個共享用戶,在快取已編譯的 PHP 位元組代碼並透過 DSO 運行 PHP 時使用該共享用戶,因為「無人」用戶可以滿足此需求。您可以透過前往 WHM 並查看 Main >> Service Configuration >> Apache Configuration 來判斷您的伺服器是否設定為透過 DSO 運行 PHP。 >> PHP 和 SuExec 配置

您可以在這裡找到更多詳細資訊:

https://helpdesk.wiredtree.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1663

相關內容