CentOS7 关闭SELinux详细步骤,临时+永久关闭
前言
刚装完 CentOS7,部署网站的时候老是遇到各种权限问题:文件明明权限对了还是访问不了,端口也开了就是连不上。排查半天发现是 SELinux 在捣乱。SELinux 是 CentOS 自带的强制访问控制安全机制,安全性很高,但对新手来说确实不太友好。本文详细讲一下怎么临时和永久关闭 SELinux,以及关闭前需要知道的注意事项。
什么是 SELinux
SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块,提供强制访问控制(MAC)机制。它比传统的自主访问控制(DAC)更严格,不仅看文件权限,还看进程和文件的安全上下文(SELinux 标签)。
CentOS7 默认开启 SELinux,这也是为什么很多新手部署完网站各种报错的原因——Nginx、PHP、MySQL 的进程和文件上下文不匹配,SELinux 直接拦截。
查看 SELinux 状态
在关闭之前,先看看 SELinux 当前是什么状态:
getenforce
输出可能是:
Enforcing:强制模式,SELinux 正在拦截违规操作Permissive:宽容模式,只记录警告不拦截Disabled:已关闭
也可以用这个命令看更详细的信息:
sestatus
输出示例:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
临时关闭 SELinux(重启后失效)
如果你只是临时测试一下,不想改配置文件,可以用这个方法:
setenforce 0
setenforce 0 表示切换到 Permissive 宽容模式,SELinux 不会再拦截操作,但会在日志里记录。这个命令立即生效,不需要重启。
验证一下:
getenforce
应该输出 Permissive。
注意: 这种方式重启服务器后 SELinux 会重新开启,所以只是临时生效。
永久关闭 SELinux(重启后依然关闭)
要永久关闭,需要修改配置文件:
1. 编辑 SELinux 配置文件
vi /etc/selinux/config
2. 修改 SELINUX 的值
找到这一行:
SELINUX=enforcing
改成:
SELINUX=disabled
3. 保存退出,重启服务器
reboot
重启后再验证一下:
getenforce
应该输出 Disabled。
三种模式说明
SELinux 有三种模式,大家可以根据需求选择:
| 模式 | 说明 |
|---|---|
enforcing |
强制模式,SELinux 强制执行策略,违规操作直接拦截 |
permissive |
宽容模式,只记录警告日志,不拦截操作 |
disabled |
完全关闭 SELinux |
建议: 如果只是临时调试,可以用 permissive 模式,既能放行所有操作,又能通过日志看到哪些操作被 SELinux 拦截了。生产环境如果实在搞不懂 SELinux,再考虑完全关闭。
常见坑
坑1:改了配置文件没重启就以为关了
很多朋友改完 /etc/selinux/config 文件,马上用 getenforce 查看,发现还是 Enforcing,就以为没改成功。其实配置文件改了之后必须重启服务器才会生效。临时生效用 setenforce 0,永久生效必须重启。
坑2:改了 SELINUX=disabled 但还有问题
有时候即使把 SELinux 关了,之前设置的安全上下文标签还在,可能会导致一些奇怪的问题。如果遇到这种情况,可以重启服务器彻底解决。
坑3:生产环境直接关闭有安全风险
SELinux 是一道安全防线,生产环境直接完全关闭会降低系统安全性。建议先尝试把模式改成 permissive,看看日志里哪些操作被拦截了,再针对性地调整上下文标签,而不是直接全部关掉。
总结
CentOS7 关闭 SELinux 的两种方式:
临时关闭(立即生效,重启失效):
setenforce 0
永久关闭(重启后生效):
- 编辑
/etc/selinux/config - 把
SELINUX=enforcing改成SELINUX=disabled - 重启服务器
新手刚部署完服务器,先临时关了跑通业务,后面再慢慢研究 SELinux 的配置,别一上来就跟它死磕。
遇到问题加QQ23979811 协助处理