SELinux 安全机制
SELinux 安全机制
ZhangCurrySELinux 安全机制
在 Linux 服务器安全体系中,防火墙、权限管理、系统补丁往往是最被关注的部分,但还有一个极其关键、同时又经常被误解的安全机制——SELinux(Security-Enhanced Linux)。许多初学者在使用 CentOS、RHEL 或 Fedora 时,常常在遇到服务无法启动、端口无法访问时,第一反应是关闭 SELinux。然而,真正理解并正确使用 SELinux,能够让你的系统安全性提升一个数量级。
一、什么是 SELinux?
SELinux 是由美国 NSA 与开源社区共同开发的一种 强制访问控制(MAC) 系统,用来限制进程对文件、目录、端口等资源的访问能力。
传统 Linux 权限(DAC:自主访问控制)有两个主要缺陷:
- 权限只看用户/用户组,粒度较粗
- root 拥有完全控制权,任何进程只要越权到 root 就可以为所欲为
SELinux 则通过严格的安全策略,为每个进程和资源定义“可以访问什么、以什么方式访问”,即使是 root 也不能越界。
二、SELinux 的三种模式
SELinux 提供三种工作模式:
1. Enforcing(强制模式)——默认、也是最安全的模式
系统严格执行 SELinux 策略,违规访问会被拒绝。
2. Permissive(宽容模式)
只记录违规行为但不执行阻拦。 常用于排查问题或调试服务。
3. Disabled(关闭)
完全禁用 SELinux。 强烈不建议生产环境关闭。
三、查看与设置 SELinux 模式
查看当前模式
1 | getenforce |
临时切换模式(重启失效)
1 | setenforce 0 # 切换到 Permissive |
永久修改模式(需修改配置文件)
1 | vim /etc/selinux/config |
修改后需要重启才能生效:
1 | reboot |
四、SELinux 的核心概念
为了理解 SELinux 事件,必须掌握以下三个关键词:
1. Type(类型)
每个进程、文件、端口都会有一个类型(type)。 SELinux 最常使用 Type Enforcement(类型强制)策略。
示例:
- httpd 进程类型:
httpd_t - 网页目录类型:
httpd_sys_content_t
如果进程类型与资源类型不匹配,就会被拒绝访问。
2. Context(安全上下文)
每个对象都会有一个 SELinux 上下文:
1 | ls -Z /var/www/html |
格式类似:
1 | system_u:object_r:httpd_sys_content_t:s0 |
其中最重要的字段是 object_r:httpd_sys_content_t,即“资源的类型”。
3. Booleans(策略开关)
用于控制常见服务行为,例如:
1 | getsebool -a | grep httpd |
例如允许 HTTP 访问网络:
1 | setsebool -P httpd_can_network_connect on |
这是比修改 Context 更安全、更推荐的方式。



