SELinux(Security-Enhanced Linux)是 Linux 内核的安全模块,通过强制访问控制(MAC)机制为系统提供额外的安全层,以下为详细使用指南,遵循专业性与实用性原则:
SELinux 核心概念
-
三种运行模式
- Enforcing:强制执行策略,拦截违规操作(生产环境推荐)。
- Permissive:仅记录违规行为而不阻止(调试用)。
- Disabled:完全关闭(不推荐,降低安全性)。
# 查看当前模式 sestatus getenforce # 输出:Enforcing/Permissive/Disabled
-
安全上下文(Security Context)
所有资源(文件/进程/端口)均被标记上下文,格式:user:role:type:level
(如system_u:object_r:httpd_sys_content_t:s0
)。# 查看文件上下文 ls -Z /var/www/html # 查看进程上下文 ps -eZ | grep nginx
日常管理操作
模式切换
sudo setenforce 1 # Enforcing模式 # 永久修改(编辑配置文件) sudo vim /etc/selinux/config # 修改为:SELINUX=enforcing
策略管理工具
- semanage:管理策略规则(需安装
policycoreutils-python-utils
)。 - restorecon:恢复文件默认上下文。
- chcon:临时修改文件上下文。
示例:允许 Nginx 使用非标准端口 8080
# 1. 检查端口上下文 semanage port -l | grep http_port_t # 2. 添加新端口到策略 sudo semanage port -a -t http_port_t -p tcp 8080 # 3. 验证 semanage port -l | grep 8080
布尔值管理
SELinux 通过布尔值(boolean)动态调整策略规则。
# 查看所有布尔值 getsebool -a # 允许 HTTP 服务访问家目录(个人网站) sudo setsebool -P httpd_enable_homedirs on # -P 永久生效
故障排除与日志
分析拒绝事件
- 查看审计日志:
sudo ausearch -m avc -ts today # 查询今日SELinux拒绝记录
- 使用 sealert(需安装
setroubleshoot-server
):sudo sealert -a /var/log/audit/audit.log # 生成可读报告
修复常见问题
-
问题:服务因文件上下文错误被拒绝。
解决:恢复默认上下文并重载:sudo restorecon -Rv /var/www/html # -R递归 -v显示详情 sudo systemctl restart httpd
-
问题:自定义服务被阻止。
解决:创建自定义策略模块:sudo grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy sudo semodule -i mypolicy.pp # 编译并加载模块
最佳实践
- 勿禁用 SELinux:改用
Permissive
模式调试,保持安全框架完整。 - 最小权限原则:通过布尔值或自定义策略精确授权,避免放宽全局规则。
- 定期审查日志:监控
/var/log/audit/audit.log
及时发现异常。 - 测试策略变更:在非生产环境验证后再部署。
- 更新策略包:使用
sudo yum update selinux-policy*
(CentOS/RHEL)保持规则最新。
进阶场景
自定义策略模块
- 收集服务的 AVC 拒绝日志:
sudo ausearch -m avc -c nginx | audit2allow -M nginx_custom
- 编译并加载模块:
sudo semodule -i nginx_custom.pp
容器环境适配
- 为 Docker 启用 SELinux:
# 在 /etc/docker/daemon.json 添加: { "selinux-enabled": true }
SELinux 是强化 Linux 安全的基石,通过理解上下文、策略工具和日志分析,可平衡安全性与灵活性。永远优先选择调整策略而非禁用 SELinux——初始学习曲线将带来长期安全回报。
引用说明基于 Red Hat SELinux 官方文档、NSA SELinux 指南及 Linux man-pages,策略命令验证环境为 CentOS 8 / RHEL 8。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9477.html