簡體   English   中英

沒有CHMOD 777,無法在NGINX中創建文本文件或將其追加到文本文件中

[英]Can't create text file or append to it in NGINX without CHMOD 777

使用Lightsail NGINX實例並在PHP文件中獲得一行內容,這行不通

$s = 'Hello world';
$myfile = file_put_contents('log.txt', $s.PHP_EOL , FILE_APPEND | LOCK_EX);

我希望它創建log.txt文件(如果不存在)。 如果有,我要附加它。 它也不做。

如果我創建該文件,它將無法正常工作。 僅當我通過SSH將文件chmod改為777時,它才能工作。

但是,將來的工作是制作文件,因此出於777安全性之外的原因,這種手動方法將不可行。

我知道這取決於安全性設置,但實際上不確定如何做才能使其盡可能安全,同時仍然允許PHP訪問創建/附加到文本文件的權限

看來我有一個叫www-data的用戶。 我努力了:

sudo chown -R www-data:www-data html
sudo chmod -R g+s html

仍然無法創建文件。

如果我在錯誤報告上輸入:

file_put_contents(log.txt): failed to open stream: Permission denied

謝謝

我真的很想知道人們在完全缺乏OP服務器設置細節的情況下如何建議使用chmodchown

根據到目前為止提到的所有內容,我可以假設 OP是以這種方式運行的:

  • NGINX作為www-data運行。
  • PHP-FPM以不同的用戶名運行(因此出現權限問題)。 假設PHP-FPM池的用戶名是foo

讓我們概述這種設置的最佳實踐。 這樣一來,您將很快獲得無權限問題的良好狀態。

誰必須擁有文件

通常(無論是否有多站點服務器),您都需要一個擁有站點文件的特定用戶。 該用戶永遠不能www-data 它必須是為此目的而創建的單獨用戶: foo

通常,該用戶foo將被設置為與其一起運行PHP-FPM池。

因此,為foo用戶設置正確的所有權:

chown -R foo:foo /path/to/your/site/html

由於PHP-FPM腳本以foo身份運行,因此目錄和其中的所有文件都由該foo擁有,因此PHP-FPM可以在那里毫無問題地完成工作。 這樣,您將絕對不會有PHP無法創建/訪問內容的可能性。

授予對Web服務器的訪問權限

請記住,該設置涉及兩個用戶:一個是Web服務器的( www-data ),一個是PHP-FPM的( foo )。

現在文件已由foo正確擁有,我們需要授予將它們讀取www-data的權限。 為什么只看書? 因為NGINX與在此設置中寫入文件系統無關。 它只需要讀取文件和遍歷目錄。

通常是通過使Web服務器的用戶成為站點用戶組的成員來完成授予 一開始很難理解,但是我會更加冗長:

假設有一個站點文件data.txt ,該站點文件現在由foo:foo擁有-Linux中的所有權是雙重所有權:該文件由foo用戶和foo組擁有。

現在, foo組只有一個成員: foo用戶。

我們需要做的是將另一個成員添加到foo組: www-data用戶。

從而:

usermod -a -G foo www-data

之后, foo組具有以下成員: foo用戶, www-data用戶。

現在我們可以繼續使用權限了:)

應該有什么權限

現在,我們已經完成了所有權,剩下的重要一點是,以這種方式調整所有文件和目錄的權限:

  • 目錄應允許組的遍歷( +x
  • 應允許組讀取文件( +r

這些權限是www-data能夠讀取每個網站文件和目錄所必需的。

最有可能的是,您不需要顯式設置這些設置,因為umask設置(此處將不涉及本主題)將已經使所有文件都具有這些權限。

但是,如果您需要修理自己的東西,可以這樣做:

chmod -R g+rX /path/to/your/site/html

大寫的X確保僅對目錄設置+x

安全可靠

在為這種設置設置了正確的文件和組所有權之后,您可以進一步提高安全性並設置更具限制性的chmod

例如, Magento安全chmod遵循該安裝程序的約定,因此您可以使用chmod權限(對於PHP文件為0400 ,對於媒體文件為0640 :)

除非您要處理一個真正奇怪的用例,否則最后一個chmod位應始終為0。

我認為,實現目標的更好方法是chown命令。 這將更改文件的所有權。

試運行

chown username yourfile

您也可以將其用於文件夾

chown -R username yourfolder

就您而言,您可能需要更改文件log.txt的所有權

嘗試將所有權更改為nginx用戶。

chown nginx: log.txt

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM