SELinux(Security-Enhanced Linux)是一种基于强制访问控制(MAC)的安全机制,通过为系统资源(文件、进程、端口等)定义精细的安全策略来增强Linux系统的安全性。以下是SELinux的工作模式分析:
SELinux有三种运行模式,可通过getenforce
命令查看当前模式,或通过setenforce
临时切换:
模式 | 描述 | 适用场景 |
---|---|---|
Enforcing | 强制执行策略,拒绝违规操作并记录日志。 | 生产环境(默认模式) |
Permissive | 仅记录违规操作但不阻止,用于策略调试。 | 策略开发或问题排查 |
Disabled | 完全关闭SELinux(需重启生效),系统回退到传统DAC(自主访问控制)。 | 紧急故障排除(不推荐长期使用) |
注意:从Disabled
切换到Enforcing/Permissive
需重启并执行文件系统重新标记(touch /.autorelabel
)。
SELinux支持两种主要策略类型: - Targeted(默认):仅对预定义的关键进程(如httpd、sshd)实施保护,其他进程运行在非限制域。 - MLS(Multi-Level Security):多级安全策略,适用于军事/政府等高安全场景,限制严格且配置复杂。
user:role:type:level
(例如:system_u:object_r:httpd_sys_content_t:s0
)。ls -Z
或ps -Z
查看标签。允许 httpd_t 进程访问 httpd_sys_content_t 类型的文件
。/etc/selinux/<type>/policy/policy.<version>
中。source context
)和资源类型(target context
)是否被策略允许。/var/log/audit/audit.log
)。bash
grep "AVC" /var/log/audit/audit.log # 或使用ausearch、audit2why
bash
setsebool -P httpd_can_network_connect on # 示例:允许Apache访问网络
bash
chcon -t httpd_sys_content_t /path/to/file # 临时修改
semanage fcontext -a -t httpd_sys_content_t "/path/to/file(/.*)?" && restorecon -Rv /path # 永久修改
bash
setenforce 0 # Permissive
setenforce 1 # Enforcing
bash
yum install policycoreutils policycoreutils-python-utils setools-console
优点 | 缺点 |
---|---|
防止提权攻击(即使root权限受限) | 配置复杂,学习曲线陡峭 |
最小权限原则(默认拒绝) | 可能误拦截合法操作(需调整策略) |
保护关键服务隔离 | 性能轻微开销(通常<5%) |
Enforcing
模式,避免使用Disabled
。audit2allow
生成自定义策略模块:bash
grep "AVC" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp
semanage
管理上下文/端口,而非直接编辑文件。通过理解SELinux的工作模式,可以更有效地平衡安全性与可用性。对于关键服务,建议在Permissive
模式下测试策略后再部署到Enforcing
模式。