CentOS 6.7 作为一款经典的 Linux 发行版,其安全机制中的 SELinux(Security-Enhanced Linux)扮演着重要角色,SELinux 由美国国家安全局(NSA)开发,通过强制访问控制(MAC)机制为系统提供更高的安全性,本文将详细介绍 CentOS 6.7 中 SELinux 的基本概念、配置方法、常见问题及解决方案。

SELinux 的基本概念
SELinux 的核心是基于安全策略的访问控制,它为系统中的每个进程、文件和端口定义了安全上下文(security context),并通过策略规则决定允许或拒绝访问操作,与传统的自主访问控制(DAC)不同,SELinux 的 MAC 机制独立于用户权限,即使进程以 root 身份运行,也需要遵守 SELinux 策略的限制,在 CentOS 6.7 中,SELinux 支持三种运行模式: enforcing(强制模式,严格限制违规操作)、permissive(宽松模式,仅记录违规但不阻止)和 disabled(禁用模式),默认情况下,CentOS 6.7 启用 enforcing 模式,以最大化系统安全性。
SELinux 上下文与文件标签
每个文件、目录和进程在 SELinux 中都有唯一的安全上下文,通常由用户(user)、角色(role)、类型(type)和级别(level)四部分组成,格式为 user:role:type:level,Web 服务的默认目录 /var/www/html 的类型通常为 httpd_sys_content_t,确保只有 Apache 进程可以读取其中的文件,使用 ls -Z 命令可以查看文件的安全上下文,而 sefcontext_relabel 工具用于修改文件标签,当文件标签错误时,可能导致服务无法访问,此时需重新标记文件上下文或使用 restorecon 命令恢复默认标签。
SELinux 策略与布尔值
SELinux 策略是一套规则集,定义了进程间的交互权限,CentOS 6.7 提供了策略模块,如 targeted(默认策略,仅限制特定服务)和 mls(多级安全策略),管理员可通过 getsebool 和 setsebool 命令管理布尔值(Boolean),即策略开关,以启用或禁用特定功能。httpd_can_network_connect 布尔值控制 Apache 是否允许网络连接,若 Web 服务无法访问外部资源,可尝试启用该布尔值:setsebool -P httpd_can_network_connect on,参数 -P 表示永久生效,避免重启后失效。

SELinux 日志故障排查
当 SELinux 阻止合法操作时,日志是排查问题的关键,CentOS 6.7 的 SELinux 日志通常位于 /var/log/audit/audit.log 或 /var/log/messages,使用 ausearch 工具可查询相关事件,ausearch -m AVC -ts today 显示今天的违规记录,通过 audit2why 或 audit2allow 工具分析日志,可生成临时或永久的策略模块,允许特定操作,若日志显示拒绝 HTTP 服务访问文件,可运行 audit2allow -M mypolicy 编译自定义策略并加载。
禁用与启用 SELinux 的注意事项
尽管 SELinux 增强了安全性,但在某些场景下(如开发测试)可能需要临时禁用,禁用 SELinux 需编辑 /etc/selinux/config 文件,将 SELINUX=enforcing 改为 SELINUX=disabled,并重启系统,需注意,直接禁用会降低安全性,建议仅在必要时操作,若需临时切换至 permissive 模式,可执行 setenforce 0,此时系统记录违规但不阻止操作,便于调试。
相关问答 FAQs
Q1: 如何查看当前 SELinux 的运行模式?
A1: 使用命令 getenforce 即可查看当前模式,返回结果为 enforcing、permissive 或 disabled,若需永久修改模式,需编辑 /etc/selinux/config 文件并重启系统。

Q2: SELinux 阻止服务访问时,如何快速定位问题?
A2: 首先检查 /var/log/audit/audit.log 或 /var/log/messages 中的 AVC 拒绝记录,使用 ausearch -m AVC 查询相关事件,通过 audit2why 分析日志原因,或调整布尔值、文件标签解决,必要时编译自定义策略模块。