Yii2 The directory is not writable by the Web process | frontend/web/assets

我在CentOS上搭建了 Yii2 advanced site
访问时报错: The directory is not writable by the Web process | frontend/web/assets
该 目录我已修改权限:777,
还是报错,
网上查了很多,不行,
有一个可用的,操作步骤如下:
1.连接上服务器后,用root 登录

[yourgmailname@instance-name ~]$ su // enter su for login as root

Password: // enter your password

2.使用getenforce命令可以在Linux下查看是否开启了SELinux。

[root@instance-name var]# getenforce

Enforcing // output

3.如果你的输出是上面的Enforcing,那么修改其为disabled

[root@instance-name var]# vi /etc/selinux/config

# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

4.修改SELINUX=enforcing to SELINUX=disabled 然后保存
5.保存后,要重启才会生效,所以重启实例

[root@instance-name var]# reboot

参考:https://stackoverflow.com/questions/42711277/google-cloud-yii2-the-directory-is-not-writable-by-the-web-process-frontend

Security Enhanced Linux (SELinux),它是由美国国家安全局(NSA)贡献的,它为Linux内核子系统引入了一个健壮的强制控制访问Mandatory Access Control架构。

SELinux如何工作
考虑一下SELinux的相关概念:

主体Subjects
目标Objects
策略Policy
模式Mode
当一个主体Subject(如一个程序)尝试访问一个目标Object(如一个文件),SELinux安全服务器SELinux Security Server(在内核中)从策略数据库Policy Database中运行一个检查。基于当前的模式mode,如果 SELinux 安全服务器授予权限,该主体就能够访问该目标。如果SELinux安全服务器拒绝了权限,就会在/var/log/messages中记录一条拒绝信息。

听起来相对比较简单是不是?实际上过程要更加复杂,但为了简化介绍,只列出了重要的步骤。
SELinux
模式
有三个模式(可以由用户设置)。这些模式将规定 SELinux 在主体请求时如何应对。这些模式是:

Enforcing 强制— SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问 Permissive 宽容— SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志 Disabled 禁用— 完全禁用SELinux

Yii2 The directory is not writable by the Web process | frontend/web/assets_第1张图片
(getenforce命令显示SELinux的状态是Enforcing启用状态)

默认情况下,大部分系统的SELinux设置为Enforcing。你要如何知道你的系统当前是什么模式?你可以使用一条简单的命令来查看,这条命令就是 getenforce。这个命令用起来难以置信的简单(因为它仅仅用来报告SELinux的模式)。要使用这个工具,打开一个终端窗口并执行 getenforce 命令。命令会返回 Enforcing、Permissive,或者Disabled(见上图)。

设置SELinux的模式实际上很简单——取决于你想设置什么模式。记住:永远不推荐关闭 SELinux。为什么?当你这么做了,就会出现这种可能性:你磁盘上的文件可能会被打上错误的权限标签,需要你重新标记权限才能修复。而且你无法修改一个以 Disabled 模式启动的系统的模式。你的最佳模式是Enforcing或者Permissive。

你可以从命令行或/etc/selinux/config文件更改SELinux的模式。要从命令行设置模式,你可以使用setenforce工具。要设置Enforcing模式,按下面这么做:

1.打开一个终端窗口
2.执行su然后输入你的管理员密码
3.执行setenforce 1
4.执行getenforce确定模式已经正确设置(如下图)
Yii2 The directory is not writable by the Web process | frontend/web/assets_第2张图片
要设置模式为Permissive,这么做:
1.打开一个终端窗口
2.执行su然后输入你的管理员密码
3.执行setenforce 0
4.执行getenforce确定模式已经正确设置(如下图)
Yii2 The directory is not writable by the Web process | frontend/web/assets_第3张图片

策略类型
SELinux策略有两种:
Targeted目标 — 只有目标网络进程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保护
Strict严格 — 对所有进程完全的SELinux保护
你可以在/etc/selinux/config文件中修改策略类型。用你喜欢的编辑器打开这个文件找到这一行:

SELINUXTYPE=targeted

参考 :https://www.linuxprobe.com/selinux-introduction.html

你可能感兴趣的:(php,yii)