所属文件不可访问_日志文件写入失败(permission denied)
生活随笔
收集整理的這篇文章主要介紹了
所属文件不可访问_日志文件写入失败(permission denied)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
用過Laravel的小伙伴一開始安裝完框架后可能都遇到過daily 日志文件寫入失敗的問題,接下來我們就來詳細說下日志文件寫入失敗的原因以及對應(yīng)的解決方案。
在講這個問題之前可能需要簡單介紹下Linux系統(tǒng)下的文件的Ownership和Permission。
- Ownership
- User
User是文件的所有者,默認情況下,用戶創(chuàng)建了一個文件,該文件的所有者就是該用戶。 - Group
一個用戶組能包含多個用戶,所有屬于這個組的用戶都有相同的權(quán)限來訪問文件。假設(shè)你有一個項目,很多用戶都需要訪問這個項目文件的權(quán)限,你不需要手動賦予這些用戶所有權(quán)限,你只需要把這些用戶加到一個組里面,賦予這些組有訪問文件的權(quán)限,這樣一來就僅僅只有組里面的成員能對文件進行讀寫操作。 - Other
任何其他的用戶都能訪問文件,因此,給Other用戶賦予權(quán)限,相當于所有用戶都擁有這個權(quán)限。 - Permission
在 UNIX/Linux 系統(tǒng)中每一個文件和目錄都有3中權(quán)限,以下就是對三個所有者的討論。- **Read:**這個權(quán)限賦予你打開和讀取文件的權(quán)限。擁有目錄的讀權(quán)限,你能列出其內(nèi)容。
- **Write:**擁有了讀權(quán)限,你能修改文件的內(nèi)容。擁有了目錄的寫權(quán)限,你能添加、移除以及重命名該目錄下的文件。考慮一種場景,當你擁有文件的寫權(quán)限,但是沒有文件存儲目錄的寫權(quán)限,你還是能修改文件的內(nèi)容,但不能重命名、移動以及移除目錄下的文件。
- **Execute:**在Windows系統(tǒng)中,一個可執(zhí)行的程序通常都有.exe后綴,你能很方便的運行它。在 UNIX/Linux 中,除非被賦予可執(zhí)行權(quán)限,否則你將不能運行該程序。如果未授權(quán)可執(zhí)行權(quán)限,你讓然可以看并修改程序代碼(被授予讀和寫權(quán)限),但是無法運行它。
linux下文件信息的顯示截圖
linux下目錄的信息顯示截圖
以上的截圖顯示了一個文件和文件夾的信息,我們可以看到:
- r 代表可讀, w 代表可寫, x 代表可執(zhí)行。
- 第一位文件顯示 - ,文件顯示 d 。
- 上面第一張圖片, rw-rw-r-— 中。第一組 rw- 表示文件的所有者對文件有可讀、可寫、不可執(zhí)行的權(quán)限。第二組 rw- 表示文件所屬的組內(nèi)用戶對該文件有可讀、可寫、不可執(zhí)行的權(quán)限。第三組 r-— 表示其他任何用戶對該文件有可讀、不可寫、不可執(zhí)行的權(quán)限。
- rw-rw-r-- 用二進制表示為 664 ,每一位如有權(quán)限則為 1 ,否則為 0 ,第一個三位 rw- 用二進制表示為 110 轉(zhuǎn)化為十進制就是 6,后面兩組依次類推,最后得到 664 。
- 上面第一張圖片的 dior www-data 表示該文件的所有者是 dior 用戶,文件屬于 www-data 組。
我們知道很多應(yīng)用系統(tǒng)中的日志是寫文件的,且是以日期來命名文件的。所以第一次創(chuàng)建日志的用戶就顯得尤為重要,如果文件創(chuàng)建的 Onwer和 Group 不對,其他的用戶觸發(fā)寫入日志文件就會失敗。
接下來我們討論下有多少種不同的用戶可能創(chuàng)建日志文件:
- Crontab中執(zhí)行的定時任務(wù),跟創(chuàng)建 Crontab 的用戶有關(guān),此時創(chuàng)建的文件 Owner 和 Group 值分別是該用戶以及默認的 Group 。
- 一些常駐的后臺進程,比如Laravel中的 queue work ,此時創(chuàng)建的日志文件 Owner 和 Group 值分別是執(zhí)行該進程的用戶以及所屬的默認 Group 。
- 正常用戶訪問網(wǎng)站產(chǎn)生的日志文件,此時創(chuàng)建的日志文件的 Owner 和 Group 都是 www-data , www-data 用戶是web服務(wù)器默認的用戶。
由以上的分析,我們大概已經(jīng)找到了解決問題的方法。
- 執(zhí)行用戶創(chuàng)建日志文件的權(quán)限為 664 比較恰當,這就需要當前用戶的umask為 0002 。
- 當前執(zhí)行用戶的默認 Group 應(yīng)該設(shè)置為 www-data 。
下面就說下我的具體解決方案:
指定www-data用戶執(zhí)行crontab:
sudo crontab -u www-data -eLaravel中修改創(chuàng)建日志文件的權(quán)限:
編輯 confog/logging.php 文件
添加 'permission' => 0664
'daily' => ['driver' => 'daily','path' => storage_path('logs/laravel.log'),'level' => 'debug','days' => 14,'permission' => 0664, ],你有什么更好的方法么?歡迎留言!
總結(jié)
以上是生活随笔為你收集整理的所属文件不可访问_日志文件写入失败(permission denied)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 求两条曲线的交点_这几种问
- 下一篇: 设计一个处理两种类型地址的地址簿程序_编