在 web 服务器管理领域,确保服务器环境的安全性至关重要。SELinux (Security-Enhanced Linux) 是保护 Linux 服务器最有效的工具之一,它是一种强制访问控制 (MAC = mandatory access control) 安全机制。当使用最流行的 web 服务器 Apache 提供 web 内容时,正确配置 SELinux 对安全性和功能都至关重要。
本文将指导您完成配置 SELinux 以允许 Apache 服务新目录的步骤,确保您的 web 内容既安全又可访问。
理解 SELinux Contexts
在深入研究配置之前,有必要了解 SELinux 上下文。SELinux 为系统中的每个进程和文件分配安全上下文。这些上下文用于定义管理访问控制的策略。要使 Apache 访问和提供来自新目录的内容,该目录及其内容必须具有适当的 SELinux 上下文。
httpd Contexts
对于 Apache 来说,相关的 SELinux 上下文以 httpd 作为前缀。具体来说,Apache 可以访问的文件通常被标记为 httpd_sys_content_t 上下文。如果你正在处理 CGI 脚本或其他可执行内容,它们可能需要不同的上下文,比如 httpd_sys_script_exec_t。
Step 1: 确定默认 Context
首先,确定应用于 Web 内容目录的默认上下文,
Apache默认内容目录通常是 /var/www/html,使用 ls -Z 命令查看 Selinux 上下文:
ls -Z /var/www/html
该命令将显示默认 web 目录的 SELinux 上下文,您需要将其应用到新目录。
Step 2: 为新目录创建和设置 Context
确定正确的上下文后,创建新目录并设置其 SELinux 上下文。例如,创建一个名为 /var/www/newsite 的新目录,您将使用以下命令:
mkdir -p /var/www/newsite
semanage fcontext -a -t httpd_sys_content_t "/var/www/newsite(/.*)?"
restorecon -Rv /var/www/newsite
semanage fcontext 命令添加一条策略规则,将 httpd_sys_content_t 上下文分配给新目录及其内容。然后,restorerecon 命令根据策略规则应用此上下文。
Step 3: 允许网络连接
默认情况下,SELinux 可能会阻止 Apache 进行网络连接,这可能是您的 web 应用程序所必需的。为此,您需要调整 SELinux 策略,允许 Apache 进程发起网络连接。
setsebool -P httpd_can_network_connect on
Step 4: 验证配置
在配置 SELinux 之后,重要的是要验证 Apache 确实可以从新目录提供内容。在新目录中创建一个简单的测试文件,并尝试通过 web 浏览器访问它。此外,可以使用 ausearch -m avc -ts recent 命令检查任何 SELinux 拒绝访问,这可以帮助您解决任何问题。