CentOS 中 Context 对网络的要求
概念澄清 在 CentOS 中,所谓的 context 通常指 SELinux 安全上下文(包含用户、角色、类型、级别),用于实施强制访问控制。它决定进程(主体)能否以何种方式访问文件、端口、套接字等对象(客体)。SELinux 有三种模式:Enforcing(强制)、Permissive(宽容)、Disabled(禁用);CentOS/RHEL 默认启用并常用 targeted 策略,重点约束网络服务等目标进程。需要注意,SELinux 是 MAC 机制,并非网络防火墙或 ACL 的替代,通常与 firewalld 等一起使用。
对网络的具体要求
常见网络场景与检查要点
| 场景 | 必须满足的 SELinux 要求 | 快速检查与修复要点 |
|---|---|---|
| Web 服务(httpd/nginx)监听 80/443 | 进程域为 httpd_t;端口类型为 http_port_t;文档根目录为 httpd_sys_content_t | 查看进程/端口:ps -Z -C httpd、`semanage port -l |
| 自定义端口运行服务 | 将端口加入对应服务的端口类型(如 semanage port -a -t http_port_t -p tcp 8080)或改用已允许端口 |
若端口未标记正确类型,服务绑定会被拒绝(AVC 拒绝) |
| 反向代理/数据库连接 | 进程域需被允许发起网络连接(如 httpd_can_network_connect_db) |
以布尔值放开:setsebool -P httpd_can_network_connect_db on |
| DNS 服务(named) | 进程域 named_t;数据/日志目录为 named_var_run_t / named_log_t 等 | 检查目录上下文:ls -Z /var/named /var/log/named;必要时 restorecon 或调整策略 |
| FTP 服务 | 进程域 ftpd_t;被动端口范围需被标记为 ftp_port_t | 配置被动端口范围并标记:semanage port -a -t ftp_port_t -p tcp 10090-10100 |
以上要点基于 SELinux 对进程域、端口类型、文件上下文及布尔值的约束与放行机制,配合 semanage、restorecon、setsebool 等工具完成配置与修复。 |
排错与验证步骤
getenforce、sestatus;临时切换排错可用 setenforce 0(宽容模式),验证后再恢复为 Enforcing。ausearch -m avc -ts recent 或 journalctl -xe | grep -i denied,从日志中识别违规的进程域、目标类型与端口/文件。semanage port -l | grep <port>,必要时添加端口到对应类型(如 http_port_t、ftp_port_t)。ls -Z <path>;恢复默认上下文:restorecon -R <path>;永久修正策略映射:semanage fcontext -a -t <type> '<path>(/.*)?' && restorecon -R <path>。getsebool <boolean>;按需永久设置:setsebool -P <boolean> on|off。firewall-cmd --list-ports、firewall-cmd --add-port=<port>/tcp --permanent && firewall-cmd --reload。