linux下PHP項目寫入日誌失敗,fopen(xxx.log): failed to open stream: Permission denied

初次搭建lnmp服務的時候,總會有這個那個坑,對於一個接手別人工作的PHPer來說,遷移服務器,搭建一個已有的項目,很多東西都已經集成好了,所以配置什麼的的只能自己摸索。

這次遇到的問題是,每天生成的日誌文件都是無法寫入的,沒有權限寫入,而舊服務器日誌系統是完好的,到了新的服務器卻發現各種沒權限,經過百度+百度+百度,終於找到了一點突破口

提醒:本文只針對於懶得修改日誌服務源代碼,或者網上下載的日誌服務源代碼會用不會改的朋友,dalao請不必浪費時間

1,檢查php-fpm的用戶是誰
通過 ps -ef | grep php-fpm 查看用戶權限,如下圖:
php-fpm用戶權限一覽

2,檢查日誌文件夾所屬用戶及用戶組
cd到日誌文件夾所在目錄,ll查看日誌文件夾所屬用戶和用戶組
logs用戶和用戶組

注意:

如果php-fpm所屬用戶沒配置,則爲nobody用戶,而項目日誌文件夾如果沒配置,則爲root用戶組,nobody用戶組是沒有權限打開root用戶組創建的文件的,這裏跟你給不給目錄權限777沒有關係,就算你給了777,下次生成的文件,還是以目錄所有者爲主,生成一個屬於root用戶組的日誌文件,權限爲644,nobody用戶組是無法訪問的。

解決方法1:
繼續使用php-fpm的用戶nobody,修改logs目錄的用戶,將logs用戶修改爲nobody用戶組:

chown -R nobody:nobody logs
//參數說明:chown -R 用戶:用戶組  目錄名

從百度上聽說,nobody用戶是linux系統的一種保護機制(excuse?),如果網站被黑客攻擊了,拿到了nobody用戶,是沒有權限進行別的操作的,也就是說拿到了nobody用戶也攻擊不了linux系統的意思。

解決方法2:
直接修改php-fpm的所屬用戶和用戶組與logs目錄所屬用戶和用戶組一致,logs日誌默認爲root,此處不推薦用root,可以自己創建一個用戶,專門用來管理php項目,示例用www-data:

php-fpm的所屬用戶在php-fpm.conf裏面配置,如果不知道配置文件的路徑,使用find命令查找

find / -name php-fpm.conf

然後通過vim命令編輯,通過 /user 命令查找並高亮php-fpm所屬用戶,如下圖戶如下圖

php-fpm.conf

修改完畢後,記得重啓php-fpm

killall -9 php-fpm
/usr/local/php/sbin/php-fpm

大功告成!!刪除原先生成的日誌文件再測試吧!!!

如果做完以上步驟還不行,就檢查一下nginx的用戶,把nginx用戶也改爲與php-fpm用戶一樣,nginx用戶配置在nginx.conf文件夾裏

ps-ef | grep nginx

找到user配置,修改爲php-fpm所屬用戶,示例爲www-data:
nginx.conf

user配置一般在nginx.conf前幾行。

綜合上面的,一般能解決問題了(個人親測),希望能對相同問題的人有用。

順便,理查德天下第一!

相關文章:
爛泥:nginx、php-fpm、mysql用戶權限解析
http://www.mamicode.com/info-detail-243751.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章