开启或关闭SELinux
约 957 字
SELinux(Security-Enhanced Linux)是内核级强制访问控制机制:即使进程被攻破拿到 root 身份,也只能在策略允许的范围内活动,能有效挡住提权攻击。但它的策略比较严格,某些软件(常见于面板、自编译服务)会因未适配而无法启动,此时可能需要临时切换到宽容模式排查,或彻底关闭。
三种模式
| 模式 | 配置值 | 行为 |
|---|---|---|
| 强制执行 | enforcing | 违反策略的操作直接拦截,正常服务器推荐状态 |
| 宽容模式 | permissive | 不拦截,只记录违规日志,用于排查策略冲突 |
| 关闭 | disabled | 完全不加载策略 |
查看当前状态
sestatus # 详细状态:是否启用、当前模式、策略版本
getenforce # 只输出当前模式:Enforcing / Permissive / Disabled临时切换(重启后失效)
sudo setenforce 0 # Enforcing → Permissive(临时宽容)
sudo setenforce 1 # Permissive → Enforcing(恢复强制)排障用法
服务报 Permission denied 但 chmod 777 也不管用,先 setenforce 0 试一下:若立刻正常,基本可断定是 SELinux 策略拦截,再去日志里找具体规则(见下文「按违规日志放行」),不要长期关着了事。
永久开启
- 编辑配置文件,把
SELINUX=改为enforcing(或先permissive观察):
sudo vim /etc/selinux/config- 关键一步:在根目录创建重打标文件,否则重启后会因文件缺少 SELinux 标签而无法启动:
sudo touch /.autorelabel
sudo reboot- 重启过程中系统会对全盘文件重新打标(relabel),文件越多耗时越长,请预留时间。完成后验证:
getenforce # 输出 Enforcing 即成功Rocky Linux 9 / AlmaLinux 9 的额外步骤
9.x 系列最小化安装时,SELinux 可能被内核启动参数直接禁用,只改配置文件无效:
# 1. 确认策略组件已安装(缺哪个补哪个)
sudo dnf install -y selinux-policy-targeted policycoreutils libselinux-utils
# 2. 检查内核参数里有没有禁用项
cat /boot/grub2/grub.cfg | grep selinux
# 若输出含 selinux=0 或 enforcing=0,移除这些参数:
sudo grubby --update-kernel ALL --remove-args selinux
# 3. 打标并重启
sudo touch /.autorelabel
sudo reboot提示
Rocky 9 重启后 getenforce 仍显示 Disabled 的话,再执行一次 sudo reboot -f 通常就正常了。
永久关闭
sudo vim /etc/selinux/config # 把 SELINUX=enforcing 改为 disabled
sudo reboot重启后 sestatus 显示 SELinux status: disabled 即已关闭。
关闭等于拆掉一层防线
关闭 SELinux 后系统只剩传统的"属主/组/其他"权限控制,Web 服务一旦被入侵,攻击者更容易横向提权。建议:能用宽容模式 + 按日志放行解决的,就不要长期 disabled;确实需要关闭的(如部分面板的已知兼容问题),务必把其他安全项做足,见SSH安全加固清单。
按违规日志放行
宽容模式下跑一段时间业务,把被拦截的操作逐条放行,再切回强制模式:
# 查看最近的 SELinux 拦截记录
sudo ausearch -m avc -ts recent
# 文件迁移/恢复后标签不对,按默认策略恢复
sudo restorecon -Rv /www/wwwroot日志里 denied 动作对应被拦的具体操作,可用 audit2allow 生成放行模块(安装 policycoreutils-python-utils),也可以借助 restorecon 修复标签解决大部分误拦。
常见问题
服务起不来、报错信息含 avc: denied:就是 SELinux 拦的,别急着关,先按上面的日志放行流程处理。
迁走了网站目录就 403/502:目录上的 SELinux 标签跟着旧路径走,对新路径执行 restorecon -Rv /新路径 即可。
某些安全基线要求必须开启:等保等合规场景通常要求 SELinux 处于 enforcing,关闭前先确认自己的合规要求。
