跳到主要内容

CentOS SELinux 配置

什么是 SELinux?

SELinux(Security-Enhanced Linux)是一个 Linux 内核安全模块,提供了强制访问控制(MAC)机制。与传统的自主访问控制(DAC)不同,SELinux 通过定义安全策略来限制进程和用户的权限,从而增强系统的安全性。

备注

SELinux 的主要目标是防止恶意软件或用户滥用系统资源,即使他们获得了 root 权限。

SELinux 的工作模式

SELinux 有三种工作模式:

  1. Enforcing:强制执行 SELinux 策略,违反策略的操作将被阻止并记录。
  2. Permissive:仅记录违反 SELinux 策略的操作,但不会阻止。
  3. Disabled:完全禁用 SELinux。

默认情况下,CentOS 的 SELinux 模式为 Enforcing

查看当前 SELinux 模式

你可以使用以下命令查看当前的 SELinux 模式:

bash
sestatus

输出示例:

SELinux status:                 enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33

修改 SELinux 模式

你可以通过编辑 /etc/selinux/config 文件来修改 SELinux 的模式:

bash
SELINUX=enforcing

enforcing 改为 permissivedisabled,然后重启系统以应用更改。

警告

禁用 SELinux 可能会导致系统安全性降低,建议仅在调试时使用 permissive 模式。

SELinux 上下文

SELinux 使用上下文(Context)来标识文件、目录和进程的安全属性。上下文通常由以下几部分组成:

  • 用户(User):SELinux 用户。
  • 角色(Role):用户或进程的角色。
  • 类型(Type):对象的安全类型。
  • 级别(Level):多级安全(MLS)或多类别安全(MCS)的级别。

查看文件或目录的 SELinux 上下文

使用 ls -Z 命令可以查看文件或目录的 SELinux 上下文:

bash
ls -Z /var/www/html

输出示例:

-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html

修改文件或目录的 SELinux 上下文

你可以使用 chcon 命令来修改文件或目录的 SELinux 上下文:

bash
chcon -t httpd_sys_content_t /var/www/html/index.html

SELinux 策略

SELinux 策略定义了系统中各种对象的安全规则。CentOS 默认使用 targeted 策略,该策略仅对特定服务进行保护。

查看已安装的 SELinux 策略

使用以下命令查看已安装的 SELinux 策略:

bash
semanage boolean -l

输出示例:

SELinux boolean                State  Default Description
httpd_can_network_connect (on , on) Allow HTTPD scripts and modules to connect to the network.
httpd_enable_homedirs (off , off) Allow HTTPD to read user home directories.

修改 SELinux 布尔值

你可以使用 setsebool 命令来修改 SELinux 布尔值:

bash
setsebool -P httpd_enable_homedirs on
提示

-P 选项使更改永久生效,即使系统重启后也会保留。

实际案例:配置 Apache 与 SELinux

假设你正在运行一个 Apache Web 服务器,并且希望允许 Apache 访问 /var/www/html 目录以外的文件。

步骤 1:修改文件上下文

首先,确保文件的 SELinux 上下文正确:

bash
chcon -t httpd_sys_content_t /path/to/your/file

步骤 2:允许 Apache 访问网络

如果 Apache 需要访问外部网络资源,你可以启用相应的布尔值:

bash
setsebool -P httpd_can_network_connect on

步骤 3:检查 SELinux 日志

如果 Apache 仍然无法访问资源,你可以检查 SELinux 日志以获取更多信息:

bash
ausearch -m avc -ts recent

总结

SELinux 是 CentOS 中一个强大的安全工具,通过强制访问控制机制,可以有效防止恶意软件和用户滥用系统资源。本文介绍了 SELinux 的基本概念、工作模式、上下文和策略配置,并通过实际案例展示了如何配置 Apache 与 SELinux。

附加资源

练习

  1. 将 SELinux 模式从 Enforcing 切换到 Permissive,并观察系统行为的变化。
  2. 使用 chcon 命令修改一个文件的 SELinux 上下文,并使用 ls -Z 验证更改。
  3. 启用 httpd_enable_homedirs 布尔值,并测试 Apache 是否可以访问用户主目录中的文件。