一、SELinux安全上下文(核心概念)
SELinux 为系统中的进程、文件、目录、端口 等资源分配唯一的"安全标签"(安全上下文),是判断访问权限的核心依据,其标准格式为:
user:role:type:sensitivity
| 字段 | 核心含义 | 典型示例 |
|---|---|---|
| user(用户) | 标识SELinux用户,区分系统/普通/无限制用户 | system_u(系统用户)、unconfined_u(无限制用户) |
| role(角色) | 标识主体(进程)或客体(文件)的角色 | system_r(进程角色)、object_r(文件/目录角色) |
| type(类型) | 目标策略(RHEL默认)的核心控制字段,决定访问权限,通常以_t结尾 |
httpd_t(Apache进程)、mysqld_db_t(MariaDB数据文件) |
| sensitivity(敏感度) | MLS策略(多级安全)中使用,目标策略下默认值为s0,一般无需关注 |
s0(默认敏感度) |
二、典型服务的type上下文(核心应用)
type字段是实际权限控制的关键,以下是常见服务的进程/文件type标签示例:
| 资源类型 | type上下文标签 | 核心作用 |
|---|---|---|
| Apache进程 | httpd_t |
标识Apache服务进程,定义其访问权限范围 |
| Apache网站目录 | httpd_sys_content_t |
标识Apache可读取的静态文件,允许httpd_t访问 |
| MariaDB进程 | mysqld_t |
标识MariaDB服务进程,定义其访问权限范围 |
| MariaDB数据目录 | mysqld_db_t |
标识MariaDB数据文件,允许mysqld_t访问 |
| 临时目录(/tmp) | tmp_t |
标识临时文件,默认限制httpd_t访问 |
| HTTP端口(80/443) | http_port_t |
标识HTTP服务可使用的端口,允许httpd_t绑定 |
三、SELinux访问控制工作原理(以MariaDB为例)
SELinux通过进程type 和资源type的匹配关系控制访问,核心逻辑如下:
- 进程运行时会被标记为对应type(如MariaDB进程→
mysqld_t); - 资源(文件/端口)会被标记为对应type(如MariaDB数据文件→
mysqld_db_t); - SELinux策略预定义了"哪些进程type可以访问哪些资源type":
- 允许:
mysqld_t(MariaDB进程)可读写mysqld_db_t(数据库文件); - 拒绝:
httpd_t(Apache进程)无法访问mysqld_db_t(数据库文件)。
- 允许:
四、SELinux安全提升价值
- 服务隔离:不同服务的进程/文件被不同type标签区分,避免跨服务随意访问;
- 精准控权:仅允许进程访问其业务必需的资源type,最小化权限范围;
- 防越权攻击:即使某服务(如Apache)被入侵,攻击者也无法访问其他服务的受保护资源(如MariaDB数据文件)。
总结
- SELinux安全上下文的核心是
type字段(以_t结尾),目标策略下通过进程和资源的type匹配控制访问; - 不同服务有专属的进程type(如
httpd_t/mysqld_t)和资源type(如httpd_sys_content_t/mysqld_db_t); - SELinux通过type标签实现服务间隔离,大幅提升系统防越权访问的安全性。