CentOS SELinux 配置
什么是 SELinux?
SELinux(Security-Enhanced Linux)是一个 Linux 内核安全模块,提供了强制访问控制(MAC)机制。与传统的自主访问控制(DAC)不同,SELinux 通过定义安全策略来限制进程和用户的权限,从而增强系统的安全性。
SELinux 的主要目标是防止恶意软件或用户滥用系统资源,即使他们获得了 root 权限。
SELinux 的工作模式
SELinux 有三种工作模式:
- Enforcing:强制执行 SELinux 策略,违反策略的操作将被阻止并记录。
- Permissive:仅记录违反 SELinux 策略的操作,但不会阻止。
- Disabled:完全禁用 SELinux。
默认情况下,CentOS 的 SELinux 模式为 Enforcing
。
查看当前 SELinux 模式
你可以使用以下命令查看当前的 SELinux 模式:
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 的模式:
SELINUX=enforcing
将 enforcing
改为 permissive
或 disabled
,然后重启系统以应用更改。
禁用 SELinux 可能会导致系统安全性降低,建议仅在调试时使用 permissive
模式。
SELinux 上下文
SELinux 使用上下文(Context)来标识文件、目录和进程的安全属性。上下文通常由以下几部分组成:
- 用户(User):SELinux 用户。
- 角色(Role):用户或进程的角色。
- 类型(Type):对象的安全类型。
- 级别(Level):多级安全(MLS)或多类别安全(MCS)的级别。
查看文件或目录的 SELinux 上下文
使用 ls -Z
命令可以查看文件或目录的 SELinux 上下文:
ls -Z /var/www/html
输出示例:
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
修改文件或目录的 SELinux 上下文
你可以使用 chcon
命令来修改文件或目录的 SELinux 上下文:
chcon -t httpd_sys_content_t /var/www/html/index.html
SELinux 策略
SELinux 策略定义了系统中各种对象的安全规则。CentOS 默认使用 targeted
策略,该策略仅对特定服务进行保护。
查看已安装的 SELinux 策略
使用以下命令查看已安装的 SELinux 策略:
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 布尔值:
setsebool -P httpd_enable_homedirs on
-P
选项使更改永久生效,即使系统重启后也会保留。
实际案例:配置 Apache 与 SELinux
假设你正在运行一个 Apache Web 服务器,并且希望允许 Apache 访问 /var/www/html
目录以外的文件。
步骤 1:修改文件上下文
首先,确保文件的 SELinux 上下文正确:
chcon -t httpd_sys_content_t /path/to/your/file
步骤 2:允许 Apache 访问网络
如果 Apache 需要访问外部网络资源,你可以启用相应的布尔值:
setsebool -P httpd_can_network_connect on
步骤 3:检查 SELinux 日志
如果 Apache 仍然无法访问资源,你可以检查 SELinux 日志以获取更多信息:
ausearch -m avc -ts recent
总结
SELinux 是 CentOS 中一个强大的安全工具,通过强制访问控制机制,可以有效防止恶意软件和用户滥用系统资源。本文介绍了 SELinux 的基本概念、工作模式、上下文和策略配置,并通过实际案例展示了如何配置 Apache 与 SELinux。
附加资源
练习
- 将 SELinux 模式从
Enforcing
切换到Permissive
,并观察系统行为的变化。 - 使用
chcon
命令修改一个文件的 SELinux 上下文,并使用ls -Z
验证更改。 - 启用
httpd_enable_homedirs
布尔值,并测试 Apache 是否可以访问用户主目录中的文件。