🐇明明跟你说过:个人主页
🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅
🔖行路有良友,便是天堂🔖
目录
一、SELinux的工作机制
1、SELinux的三种状态:Permissive、Enforcing、Disabled
2、类型强制(Type Enforcement)
3、角色(Role)与层次(Level)
4、安全上下文(Security Context)
二、SELinux的配置与管理
1、使用semanage和setools进行策略管理
2、使用sestatus、getenforce、setenforce查看SELinux状态
一、SELinux的工作机制
1、SELinux的三种状态:Permissive、Enforcing、Disabled
SELinux(Security-Enhanced Linux)是一个Linux内核模块和安全体系结构,它为Linux系统提供了强制访问控制(MAC)的机制。SELinux有三种状态,每种状态对应不同的安全策略执行方式:
1. Enforcing:
- 在这种状态下,SELinux策略会被强制执行。这意味着所有不符合SELinux策略的访问尝试都会被拒绝并记录在日志中。系统会严格按照定义的安全策略进行访问控制,确保最高级别的安全性。
- 例如,如果某个进程尝试访问一个它无权访问的文件,这种访问会被阻止,并且SELinux会在日志中记录这一事件。
- Enforcing状态通常用于生产环境,以确保系统安全策略得到严格实施。
2. Permissive:
- 在这种状态下,SELinux策略不会被强制执行,但任何违反策略的行为仍然会被记录在日志中。也就是说,系统会允许所有访问尝试,即使它们不符合SELinux策略。
- Permissive状态通常用于开发和调试环境,因为它允许管理员查看哪些访问尝试会被SELinux策略阻止,而不会实际阻止这些访问。这对于调整和优化SELinux策略非常有用。
- 例如,管理员可以在Permissive模式下运行系统一段时间,以收集日志中被记录的访问尝试,然后根据这些日志调整SELinux策略。
3. Disabled:
- 在这种状态下,SELinux完全被禁用。系统不会应用任何SELinux策略,也不会记录任何SELinux相关的日志。
- Disabled状态下,系统运行时没有SELinux提供的强制访问控制,这可能会降低系统的安全性。
- 这种状态一般用于不需要或不支持SELinux的环境,或者用于排除与SELinux相关的问题。
2、类型强制(Type Enforcement)
类型强制(Type Enforcement,简称TE)是SELinux实现强制访问控制(MAC)的一种核心机制。TE通过将系统中的每个对象和每个主体(进程)分配到不同的类型,并使用策略规则来定义哪些类型的主体可以访问哪些类型的对象以及如何访问它们,从而实现细粒度的访问控制。
核心概念
1. 类型(Type):
- 每个文件、目录、设备、进程等对象和主体在SELinux中都有一个类型标签。类型标签用于标识对象和主体属于哪种类型。
2. 域(Domain):
- 进程的类型标签通常称为域(Domain)。域是主体(进程)的类型,控制主体可以执行哪些操作和访问哪些对象。
3. 对象类型:
- 对象(如文件、目录、设备等)的类型标签称为对象类型。对象类型定义了对象的属性和访问规则。
3、角色(Role)与层次(Level)
在SELinux中,除了类型强制(Type Enforcement,TE),角色(Role)和层次(Level)也是重要的概念,它们共同构成了SELinux的多层次访问控制体系。
角色(Role)
角色是SELinux中的一个安全属性,用于将用户和域(Domain)关联起来。角色基于基于角色的访问控制(RBAC)模型,定义了哪些域可以被哪些角色访问。通过角色的定义和使用,SELinux可以有效地管理用户对系统资源的访问权限。
1. 角色的定义:
- 角色在SELinux策略中定义,通常与用户映射,并且进一步限制用户可以进入哪些域。
2. 角色与域的关联:
- 角色可以与多个域关联,这样角色就可以使用这些域的权限。
- 例如,system_r角色可以访问httpd_t域的资源。
3. 用户与角色的映射:
- SELinux用户(如user_u、staff_u)映射到特定的角色,这样特定的用户就只能使用这些角色定义的权限。
层次(Level)
层次(Level)是在SELinux中实现多级安全(MLS)和多类别安全(MCS)的关键机制。层次包括安全级别(Sensitivity)和类别(Category),用于进一步细化访问控制策略。
1. 安全级别(Sensitivity):
- 安全级别表示信息的敏感性,可以定义多个级别。
- 例如:s0、s1、s2等,s0表示最低级别,s1表示较高的级别。
2. 类别(Category):
- 类别表示信息的类别,可以定义多个类别。
- 例如:c0、c1、c2等,类别用于将信息划分为不同的分类组。
3. MLS上下文:
- 在SELinux中,MLS上下文用级别:类别的形式表示,例如:s0:c0,c1。
- 这种表示方式可以用来定义哪些用户和进程可以访问哪些信息。
4、安全上下文(Security Context)
在SELinux中,安全上下文(Security Context)是一个非常重要的概念。它是一个标识符,用于描述对象和主体的安全属性。安全上下文定义了SELinux如何应用其安全策略,以控制对系统资源的访问。每个文件、进程、设备等对象都有一个安全上下文。一个典型的安全上下文由以下几个部分组成:
1. 用户(User):
- SELinux用户,不同于Linux用户。SELinux用户用于分配特定的SELinux权限集。
- 例如:system_u, user_u, staff_u。
2. 角色(Role):
- 角色用于将用户和域关联起来,定义哪些角色可以访问哪些域。
- 例如:system_r, user_r, staff_r。
3. 类型(Type)或域(Domain):
- 类型是SELinux最核心的概念,用于标识对象的类别和主体的域。类型强制(TE)策略基于类型进行访问控制。
- 例如:httpd_t, ssh_t, user_home_t。
4. 级别(Level)(可选,主要用于MLS/MCS):
- 级别由敏感度(Sensitivity)和类别(Category)组成,用于实现多级安全(MLS)和多类别安全(MCS)。
- 例如:s0, s0:c0,c1。
示例
一个典型的SELinux安全上下文可能是这样的:
system_u:object_r:httpd_sys_content_t:s0
这代表了一个文件对象,它的SELinux用户是system_u,角色是object_r,类型是httpd_sys_content_t,级别是s0。
二、SELinux的配置与管理
1、使用semanage和setools进行策略管理
semanage和setools是管理SELinux策略的强大工具。semanage主要用于修改和管理SELinux策略中的各种对象,如文件上下文、端口、用户、布尔值等。而setools是一组用于分析和调试SELinux策略的工具集。
使用 semanage
1. 修改文件上下文
- 查看文件上下文:
semanage fcontext -l
列出所有文件的SELinux上下文。
- 添加或修改文件上下文:
semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?"
将 /web 目录及其子目录和文件的类型设置为 httpd_sys_content_t。
- 应用文件上下文更改:
restorecon -Rv /web
根据当前策略重新设置 /web 目录及其子目录和文件的上下文。
使用 setools
setools 包括一组工具,用于分析和调试SELinux策略,如 sesearch、seaudit、seinfo 等。
sesearch
- 搜索允许规则:
sesearch -A -s httpd_t -t httpd_sys_content_t
查找源类型 httpd_t 对目标类型 httpd_sys_content_t 的所有允许规则。
- 查找特定权限:
sesearch -A -s httpd_t -t httpd_sys_content_t -c file -p read
查找 httpd_t 类型的进程对 httpd_sys_content_t 类型的文件具有读取权限的规则。
2、使用sestatus、getenforce、setenforce查看SELinux状态
使用semanage和setools可以对SELinux进行高级管理,而使用selinux-utils包中的工具(如sestatus、getenforce、setenforce)可以查看和修改SELinux的运行状态。这些工具是进行SELinux日常管理和检查的重要手段。
查看SELinux状态
sestatus
sestatus命令用于显示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
Max kernel policy version: 31
解释:
- SELinux status: enabled 表示SELinux已启用,disabled 表示SELinux已禁用。
- Current mode: 当前的SELinux模式,可以是enforcing或permissive。
- Mode from config file: 配置文件中定义的模式。
- Policy MLS status: 是否启用了多级安全(MLS)。
- Loaded policy name: 当前加载的SELinux策略名称(如targeted或strict)。
getenforce
getenforce命令用于查看SELinux的当前模式。
getenforce
解释:
- Enforcing: SELinux正在强制执行策略。
- Permissive: SELinux处于宽容模式,不强制执行策略,但记录违规行为。
- Disabled: SELinux已禁用。
setenforce
setenforce命令用于临时切换SELinux模式,在Enforcing和Permissive模式之间切换。
setenforce 0
解释:
- setenforce 0: 将SELinux切换到Permissive模式。
- setenforce 1: 将SELinux切换到Enforcing模式。
实践示例
1. 查看SELinux状态:
sestatus
2. 查看SELinux当前模式:
getenforce
3. 将SELinux切换到宽容模式:
sudo setenforce 0
4. 将SELinux切换回强制模式:
sudo setenforce 1
永久更改SELinux模式
如果需要永久更改SELinux的运行模式,可以编辑配置文件 /etc/selinux/config:
sudo nano /etc/selinux/config
将 SELINUX 参数设置为 enforcing, permissive 或 disabled:
SELINUX=enforcing
保存并退出编辑器,然后重启系统:
sudo reboot
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!