SElinux通过强制访问控制提升 Linux 安全性,需掌握主体、客体、安全上下文和策略等概念;使用 ls - Z 和 ps - Z 查看上下文,通过 /etc/selinux/config 设置 enforcing、permissive 或 disabled 模式,临时切换用 setenforce 命令;管理文件上下文时可用 restorecon 恢复或 semanage 自定义规则;拒绝 事件 记录在 audit.log,可用 ausearch、sealert 分析,必要时用 audit2allow 生成自定义策略模块,关键是在 enforcing 模式下正确配置上下文并及时响应日志。

SELinux(Security-Enhanced Linux)是 linux 系统 中一个强大的强制访问控制(mac)机制,能显著提升系统的安全性。正确配置 SELinux 可以限制进程和用户对文件、端口、网络等资源的访问,防止越权操作。
理解 SELinux 的基本概念
在配置之前,需要掌握几个核心概念:
- 主体(Subject):通常是进程或用户,发起对资源的操作请求。
- 客体(Object):被访问的资源,如文件、目录、端口 等。
- 安全上下文(Security Context):每个主体和客体都有一个安全标签,格式为user:role:type:level,其中 type 最重要,决定访问权限。
- 策略(Policy):定义哪些主体可以对哪些客体执行什么操作,常见有targeted(仅保护特定服务)和strict(全面保护)。
使用 ls -Z 查看文件的安全上下文,用 ps -Z 查看进程的上下文。
设置 SELinux 运行模式
SELinux 有三种主要模式:
- enforcing:强制执行策略,违反行为会被阻止并记录日志。
- permissive:不执行策略,只记录警告,适合调试。
- disabled:完全关闭 SELinux(不推荐)。
通过 /etc/selinux/config 文件设置默认模式:
SELINUX=enforcing SELINUXTYPE=targeted
临时切换模式可用命令:
-
setenforce 1→ 切换到 enforcing -
setenforce 0→ 切换到 permissive
注意:setenforce 0不会将 SELinux 设为永久禁用,只是临时进入 permissive 模式。
管理文件安全上下文
当添加新文件或更改服务路径时,SELinux 可能因上下文不匹配而阻止访问。例如,将 Web 内容放在非标准目录时 apache 无法读取。
解决方法 是恢复或设置正确的上下文:
-
restorecon -v /path/to/file:根据默认规则恢复上下文。 -
semanage fcontext -a -t httpd_sys_content_t "/webdata(/.*)?":为自定义路径添加上下文规则。 -
restorecon -R /webdata:应用新规则。
确保已安装 policycoreutils-python-utils 包以使用 semanage 命令。
处理拒绝事件与日志分析
当 SELinux 阻止操作时,会记录日志到 /var/log/audit/audit.log 或/var/log/messages。
使用以下 工具 分析拒绝原因:
-
ausearch -m avc -ts recent:查找最近的拒绝消息。 -
sealert -l *:显示人类可读的解释和修复建议。
如果确认某个拒绝是误报且需放行,可用 audit2allow 生成自定义策略模块:
# ausearch -m avc -ts recent | audit2allow -M mypol # semodule -i mypol.pp
此方法适用于特殊场景,但应谨慎使用,避免削弱安全性。
基本上就这些。合理配置 SELinux 不需要完全理解所有细节,关键是保持 enforcing 模式,正确设置上下文,及时查看日志并做出响应。安全性和可用性可以兼顾。


