SELinux造成的Apache 403错误

今天配置apache的时候始终提示403错误,检查conf文件的设置已经是

Allow from all

尝试着去修改WEB文件的读写权限和拥有者都不奏效

后来在网上查到说可能跟 SELinux 有关
* 百度百科:SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。

看起来是很重要的东西,但似乎会造成很多莫名其妙的故障。
查看SELinux状态:
方法一:

/usr/sbin/sestatus -v
# enabled 即为开启状态,disabled 为关闭

方法二:

getenforce
# enabled 即为开启状态,disabled 为关闭

关闭SELinux:
方法一:

/usr/sbin/setenforce 0
# 0 为permissive模式,即关闭SELinux,1 为enforcing模式。此方式即时生效

方法二:

vim /etc/selinux/config
# 将 SELINUX=enforcing 改为 SELINUX=disabled。此方式需要重启生效

如果是对外开放的服务器,不建议直接将其停用掉,会降低整体服务器系统的安全性。
我们可以修改文件属性:
首先查看文件属性: ls -Z

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 phpinfo.php
drwxr-xr-x. root root unconfined_u:object_r:home_root_t:s0 phpmyadmin

文件夹的 SELinux 属性必须是 httpd_sys_content_t 才能被 web 服务器访问,但现在却是 home_root_t
然后使用 chcon 命令修改属性:

chcon -R -t httpd_sys_content_t phpmyadmin/

总结:
当时我是直接把压缩包解压到自己的用户目录下,结果被自动打上了 home_root_t 属性,再用mv命令移动到web目录下后,没有被重新设置为 httpd_sys_content_t 属性,导致 httpd (以 apache 用户身份启动) 无权限访问该文件夹。
使用 chcon 修改属性为 httpd_sys_content_t 后,httpd 即可以正常访问,问题解决。
或者当时也可以使用cp命令将解压出来的文件拷贝到web目录,这样文件就会被赋予 httpd_sys_content_t 属性,再用mv命令不会被改回 home_root_t 属性。