CentOS SELinux Context 定制化指南
一 概念与准备
- 在 CentOS 中,Context 通常指 SELinux 安全上下文,用于给文件、目录、进程等对象打上安全标签,从而实施细粒度访问控制。常见查看与状态命令:
- 查看状态:sestatus、getenforce
- 查看对象标签:ls -Z、ps -eZ
- 运行模式切换:setenforce 0|1(分别对应 Permissive/Enforcing)
- 工具准备(不同版本包名略有差异):
- 策略与上下文管理:semanage(常见包名:policycoreutils-python-utils)
- 布尔值管理:setsebool
- 日志分析:ausearch、aureport
- 故障排查助手:setroubleshoot-server(配合 sealert 使用)
- 建议始终在 Enforcing 模式下工作,调试阶段可临时切到 Permissive 并配合日志定位问题。
二 永久定制文件与目录上下文
- 步骤概览:
- 用 semanage fcontext 添加路径到类型的映射规则(持久化到策略数据库)
- 用 restorecon 将规则应用到实际文件/目录
- 常用命令范式:
- 添加规则(支持正则):
- semanage fcontext -a -t httpd_sys_content_t “/var/www/html(/.*)?”
- semanage fcontext -a -t mysqld_db_t “/data/mysql(/.*)?”
- 应用规则:
- restorecon -Rv /var/www/html
- restorecon -Rv /data/mysql
- 验证:
- ls -Z /var/www/html/index.html
- 提示:
- 使用带正则的 (/.*)? 可一次性匹配目录及其子项
- 若需删除规则:semanage fcontext -d -t 类型 “/path(/.*)?”
- 也可直接编辑本地策略文件 /etc/selinux/targeted/contexts/files/file_contexts.local,再执行 restorecon 生效。
三 临时调整与回滚
- 快速临时修改(重启或 restorecon 后可能恢复):
- chcon -t httpd_sys_rw_content_t /var/www/html/app.wsgi
- chcon -R -t public_content_rw_t /var/ftp/pub
- 回滚到默认标签:
- restorecon -Rv /var/www/html
- 适用场景:验证、应急;长期方案应使用 semanage fcontext + restorecon 持久化。
四 服务与布尔值定制
- SELinux 布尔值可开关某类行为的策略,例如:
- 查看布尔值:getsebool -a | grep ftp
- 永久开启:setsebool -P allow_ftpd_anon_write 1
- 临时开启:setsebool allow_ftpd_anon_write 1
- 常见服务与类型示例(按需选用):
- Web 内容:httpd_sys_content_t(读)、httpd_sys_rw_content_t(读写)
- 数据库数据目录:mysqld_db_t
- FTP 公开目录:public_content_t(读)、public_content_rw_t(读写)
- 修改后建议用 restorecon 确保相关文件标签正确,并重启服务验证。
五 排错与最佳实践
- 排错流程:
- 查看最近拒绝:ausearch -m avc -ts recent;汇总:aureport -m avc
- 安装并使用 setroubleshoot-server,通过 sealert -a /var/log/audit/audit.log 获取可操作建议
- 调试阶段可切 Permissive:setenforce 0,定位完成后回到 Enforcing
- 最佳实践:
- 优先使用 semanage fcontext + restorecon 做持久化变更,避免仅用 chcon
- 变更前备份策略与关键配置:cp -a /etc/selinux /etc/selinux.bak-$(date +%F)
- 变更后回归验证:服务可用性、日志无新增 AVC 拒绝
- 定期更新策略工具与系统组件,保持与策略库一致
- 安全提示:在生产环境修改 SELinux 策略与上下文前,请在测试环境验证,并确保有回滚方案与备份,避免因标签不当导致服务不可用。