所属文件不可访问_日志文件写入失败(permission denied)
用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案。
在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permission。
- Ownership
- User
User是文件的所有者,默认情况下,用户创建了一个文件,该文件的所有者就是该用户。 - Group
一个用户组能包含多个用户,所有属于这个组的用户都有相同的权限来访问文件。假设你有一个项目,很多用户都需要访问这个项目文件的权限,你不需要手动赋予这些用户所有权限,你只需要把这些用户加到一个组里面,赋予这些组有访问文件的权限,这样一来就仅仅只有组里面的成员能对文件进行读写操作。 - Other
任何其他的用户都能访问文件,因此,给Other用户赋予权限,相当于所有用户都拥有这个权限。 - Permission
在 UNIX/Linux 系统中每一个文件和目录都有3中权限,以下就是对三个所有者的讨论。- **Read:**这个权限赋予你打开和读取文件的权限。拥有目录的读权限,你能列出其内容。
- **Write:**拥有了读权限,你能修改文件的内容。拥有了目录的写权限,你能添加、移除以及重命名该目录下的文件。考虑一种场景,当你拥有文件的写权限,但是没有文件存储目录的写权限,你还是能修改文件的内容,但不能重命名、移动以及移除目录下的文件。
- **Execute:**在Windows系统中,一个可执行的程序通常都有.exe后缀,你能很方便的运行它。在 UNIX/Linux 中,除非被赋予可执行权限,否则你将不能运行该程序。如果未授权可执行权限,你让然可以看并修改程序代码(被授予读和写权限),但是无法运行它。
![](/assets/blank.gif)
linux下文件信息的显示截图
![](/assets/blank.gif)
linux下目录的信息显示截图
以上的截图显示了一个文件和文件夹的信息,我们可以看到:
r
代表可读,w
代表可写,x
代表可执行。- 第一位文件显示
-
,文件显示d
。 - 上面第一张图片,
rw-rw-r-—
中。第一组rw-
表示文件的所有者对文件有可读、可写、不可执行的权限。第二组rw-
表示文件所属的组内用户对该文件有可读、可写、不可执行的权限。第三组r-—
表示其他任何用户对该文件有可读、不可写、不可执行的权限。 rw-rw-r--
用二进制表示为664
,每一位如有权限则为1
,否则为0
,第一个三位rw-
用二进制表示为110
转化为十进制就是6
,后面两组依次类推,最后得到664
。- 上面第一张图片的
dior www-data
表示该文件的所有者是dior
用户,文件属于www-data
组。
我们知道很多应用系统中的日志是写文件的,且是以日期来命名文件的。所以第一次创建日志的用户就显得尤为重要,如果文件创建的 Onwer
和 Group
不对,其他的用户触发写入日志文件就会失败。
接下来我们讨论下有多少种不同的用户可能创建日志文件:
Crontab
中执行的定时任务,跟创建Crontab
的用户有关,此时创建的文件Owner
和Group
值分别是该用户以及默认的Group
。- 一些常驻的后台进程,比如Laravel中的
queue work
,此时创建的日志文件Owner
和Group
值分别是执行该进程的用户以及所属的默认Group
。 - 正常用户访问网站产生的日志文件,此时创建的日志文件的
Owner
和Group
都是www-data
,www-data
用户是web服务器默认的用户。
由以上的分析,我们大概已经找到了解决问题的方法。
- 执行用户创建日志文件的权限为
664
比较恰当,这就需要当前用户的umask为0002
。 - 当前执行用户的默认
Group
应该设置为www-data
。
下面就说下我的具体解决方案:
指定www-data用户执行crontab:
sudo crontab -u www-data -e
Laravel中修改创建日志文件的权限:
编辑 confog/logging.php
文件
添加 'permission' => 0664
'daily' => ['driver' => 'daily','path' => storage_path('logs/laravel.log'),'level' => 'debug','days' => 14,'permission' => 0664,
],
你有什么更好的方法么?欢迎留言!
所属文件不可访问_日志文件写入失败(permission denied)相关推荐
- 【文件包含漏洞】——文件包含漏洞进阶_日志文件包含利用
文章目录 一.实验目的: 二.工具: 三.实验环境: 四.原理说明: 1. 原理: 2. 利用方法: 五.日志文件相关: 1. 日志文件路径: 2. 没有`access.log`访问日志的原因: 3. ...
- 怎样下载linux的日志文件,Linux常见的日志文件及查看命令
Linux常见日志和常用命令 Linux 日志都以明文形式存储,所以我们不需要特殊的工具就可以搜索和阅读它们.Linux 日志存储在 /var/log 目录中,我们可以编写脚本,来扫描这些日志,并基于 ...
- 图解使用Win8Api进行Metro风格的程序开发二----使用文件选择器访问和保存文件
我们紧接着上篇,这篇将介绍如何使用文件选择器访问和保存文件 -----------------------------------我是华丽的分割线--------------------------- ...
- php删除oracle数据记录日志文件,Oracle手动切换日志文件和清空日志文件
日志文件组是循环使用的,当一组日志文件被写满时,Oracle系统自动的切换到下一组日志文件.在需要的时候,数据库管理员也可以手 Oracle切换日志文件组 日志文件组是循环使用的,当一组日志文件被写满 ...
- linux数据库log文件太大,SqlServer日志文件过大的处理方法
最近遇到某个MSSqlServer2008 数据库的日志文件过于庞大,数据文件4G,日志文件达到80G. 日志文件这么大的原因还得从数据库的恢复模式说起: 三种恢复模式:简单恢复模式.完整恢复模式和大 ...
- Linux 删除文件时报错 rm: cannot remove ‘xxx xxx‘:Permission denied
Linux 删除文件时报错 rm: cannot remove 'xxx xxx':Permission denied 1. 原因 没有这个文件的所有权 2. 解决办法 方法一: # 使用 root ...
- 访问HDFS的权限问题:Permission denied: user=xxx, access=WRITE, inode=“xxxxxxxx“:
问题描述 今天在 idea 中写 scala 的代码访问服务器的 HDFS,报访问HDFS的权限问题:Permission denied: user=xxx, access=WRITE, inode= ...
- sqlite.interop.dll 请确保此文件可以访问_不用数据线,一秒让电脑和iphone快速传文件...
目前只支持ios13以上的版本,如果是低版本的ios用户需要升级到ios13才能使用这个方式来互传文件.电脑和ios设备要在同一局域网下. 第一步:创建一个用于共享的账户 开始菜单→设置→账户→家庭和 ...
- 群晖 建立文件禁止访问_在设计系统中建立可访问性
群晖 建立文件禁止访问 Imagine going about your online activity - paying bills through your bank, buying ticket ...
最新文章
- 怎么做圆一圈圈扩散效果_推广为什么没有效果,网络推广怎么做才有效果?
- 解决[warn] _default_ VirtualHost overlap on port 80, the first has precedence问题
- linux 内存显示括号内字母的含义
- python创建float型的列表_如何在Python中进行列表的创建?
- Symbol Mc1000 声音的设置以及播放
- python内置函数返回序列中最大元素_Python之路(第八篇)Python内置函数、zip()、max()、min()...
- flask v0.1 路由
- 不缓存调用js的方法
- 如何关闭热点资讯,如何关闭360浏览器热点资讯
- 多任务计时器anytime
- springboot实现数据库读写分离的一款框架
- 微信小程序添加外部字体方法
- C语言代码实现最小二乘法线性拟合直线
- 这位985名校的教授火了!当了10年博导,竟无一博士毕业?
- 远程控制软件teamviewer简介
- 2015年最新互联网概念股一览表
- Flan Scan:Cloudflare开源轻量级网络漏洞扫描软件
- Android Studio配置优化最全详解
- SpringBoot项目端点配置
- JAVAEE工程师入门技术之第1课day01_Java基础语法HelloWorld