centos selinux规则如何设置
小樊
32
2025-12-21 09:23:48
CentOS SELinux 规则设置实操指南
一 基础与模式切换
- 查看状态与当前模式:使用 sestatus、getenforce。
- 临时切换模式:
- 宽容模式(只告警不拦截):sudo setenforce 0
- 强制模式:sudo setenforce 1
- 永久生效:编辑 /etc/selinux/config,设置 SELINUX=enforcing|permissive|disabled,然后重启。生产环境不建议 disabled。
- 模式说明:
- Enforcing:强制执行策略;
- Permissive:记录违规但不阻断,便于排障;
- Disabled:关闭 SELinux(需重启,切换过程有风险,生产不建议)。
二 上下文与端口规则
- 查看上下文:
- 文件/目录:ls -Z /path
- 进程:ps -auxZ | grep <进程名>
- 临时修改上下文:sudo chcon -t /path(重启或 relabel 后可能丢失)。
- 持久化文件上下文:
- 添加规则:sudo semanage fcontext -a -t “/path(/.*)?”
- 应用规则:sudo restorecon -Rv /path
- 示例(将自定义目录作为网站内容):
- sudo semanage fcontext -a -t httpd_sys_content_t “/my/web/content(/.*)?”
- sudo restorecon -Rv /my/web/content
- 端口类型:
- 查看端口类型:semanage port -l | grep <端口/协议>
- 添加端口类型(示例将 81/tcp 加入 http 端口类型):
- sudo semanage port -a -t http_port_t -p tcp 81
- 提示:若 semanage 未安装,在 CentOS 7 可安装 policycoreutils-python 包以提供相关工具。
三 布尔值开关
- 列出布尔值及说明:sudo semanage boolean -l(含描述、当前/默认值);仅查看开关状态:getsebool -a。
- 开关布尔值:
- 临时:setsebool on|off
- 永久:setsebool -P on|off
- 示例(允许 httpd 脚本连接数据库):
- 查看:getsebool httpd_can_network_connect_db
- 临时开启:setsebool httpd_can_network_connect_db on
- 永久开启:setsebool -P httpd_can_network_connect_db on
- 常用服务布尔值示例:httpd_enable_cgi、httpd_enable_homedirs、ftp_home_dir、nfs_export_all_ro、named_write_master_zones 等,可按需开启。
四 拒绝日志分析与自定义策略模块
- 定位拒绝事件:
- 查看最近 AVC:sudo ausearch -m avc -ts recent
- 生成可读报告:sudo sealert -a /var/log/audit/audit.log
- 从日志生成并加载模块:
- 生成模块:sudo ausearch -m avc -ts recent | audit2allow -M mypolicy(生成 mypolicy.te 与 mypolicy.pp)
- 加载模块:sudo semodule -i mypolicy.pp
- 适用场景:当确认某拒绝为业务所需且安全可接受时,用 audit2allow 快速生成最小允许规则,优先于全局放宽策略。
五 常见场景示例
- 场景A(Nginx/Apache 读取自定义目录):
- 持久化上下文:
- sudo semanage fcontext -a -t httpd_sys_content_t “/data/www(/.*)?”
- sudo restorecon -Rv /data/www
- 场景B(自定义端口运行 Web 服务):
- 端口加入 http 类型:
- sudo semanage port -a -t http_port_t -p tcp 8080
- 场景C(允许 httpd 连接数据库):
- sudo setsebool -P httpd_can_network_connect_db on
- 场景D(排查与放行):
- 分析:sudo sealert -a /var/log/audit/audit.log
- 必要时生成并加载模块:ausearch -m avc -ts recent | audit2allow -M myhttp && sudo semodule -i myhttp.pp
- 安全建议:优先使用“最小权限”原则,先查布尔值与上下文,再考虑模块;确需放宽时使用 audit2allow 生成最小规则并验证。