RH134问答6:管理SELinux安全性

1. SELinux 是如何保护资源的?

SELinux主要通过强制访问控制(MAC)和安全上下文机制提供细粒度的安全保护。其核心是在传统的Linux自主访问控制检查通过后,再增加一道强制性的安全防线。

具体保护流程如下:

(1) 访问拦截与策略检查:当进程请求访问文件、目录、端口等资源时,SELinux会拦截该请求。SELinux内核(Linux Security Module, LSM)子系统会查询预先加载的安全策略,判断该行为是否被允许。

(2) 强制访问决策:如果策略明确允许,访问操作可继续;如果策略拒绝,操作将被阻断,并向进程返回错误。默认情况下,策略不允许任何交互,除非有明确授予权限的规则。

(3) 性能优化与审计:SELinux会使用访问向量缓存(AVC)缓存访问决策以提高性能。所有被拒绝的操作都会记录在 /var/log/audit/audit.log 中,其条目以 type=AVC 开头,便于管理员审计和排查。

2. 什么是强制访问控制(MAC)?它有什么特点?

强制访问控制(MAC)是一种由系统根据预先配置的全局策略来管理所有主体(如进程)对客体(如文件)访问的安全模型。在RHEL 9中,SELinux便是MAC的一个具体实现。
主要特点:

(1) 非自主性:用户不能随意覆盖或修改系统强制的安全策略。访问权限由系统策略决定,而非资源所有者。

(2) 最小权限原则:MAC能够为每个进程(如Web服务器httpd、数据库mysqld)授予其完成任务所需的最小且精确的权限,限制其超出范围的任何操作。

(3) 更强的防御能力:即使某个进程被攻击者利用漏洞攻破并获得了root权限,由于MAC的“强制”特性,攻击者也无法绕过策略去访问未经授权的系统资源,从而有效缓解了权限提升攻击的风险。

3. 什么是 SELinux 上下文?

SELinux上下文是为每个进程和系统资源(如文件、目录、网络端口)赋予的一个安全标签,用于唯一标识其在SELinux中的安全属性。可以将其理解为系统内所有客体的“安全身份证”。

在RHEL中,一个完整的SELinux上下文遵循 user:role:type:level 的语法结构:

user (SELinux用户):SELinux策略中定义的身份,用于授权一组特定的角色和级别。每个Linux系统用户都会被映射到一个SELinux用户。

role (角色):基于角色的访问控制的属性,它作为SELinux用户和进程域之间的“中介”,决定了用户可以进入哪些域。

type (类型):策略规则中的核心部分(以_t结尾)。对于进程,它被称为域;对于文件等资源,它被称为类型(type)。绝大多数策略规则都是基于类型来定义访问权限的。

level (级别):用于多级别安全(MLS)和多类别安全(MCS)的字段,提供更细粒度的数据分级保护。在RHEL的标准targeted策略中,主要使用MCS,敏感度通常是 s0。

查看SELinux上下文时,可以使用带 -Z 选项的命令查看,例如 ls -Z 查看文件和目录,ps -Z 查看进程,netstat -Z 查看网络端口。

4. setenforce 0 命令的作用是什么?

setenforce 0 命令的作用是将SELinux的运行模式临时切换为permissive(宽容模式)。

在 permissive 模式下,SELinux策略会被加载,系统会像在enforcing模式下一样,对所有访问请求进行评估并为文件和资源打上标签

值得注意的是,SELinux不会真正“拒绝” 任何被策略所禁止的访问操作。相反,它会将本应被阻止的行为记录到审计日志中(/var/log/audit/audit.log 或 /var/log/messages)。

这种模式主要用于调试和故障排除。当怀疑某个服务异常可能是由SELinux策略导致时,可以运行setenforce 0将其切换到宽容模式。如果问题消失,就能确认是SELinux策略导致了问题,随后可以有针对性地修改策略。

注意:这个命令所做的更改不会在系统重启后保留。重启后,SELinux将恢复为/etc/selinux/config文件中SELINUX=参数所指定的模式。

5. 定义一条 SELinux 文件上下文规则,以便将 /custom 目录及目录中所有文件的上下文类型设置 为 httpd_sys_content_t。

首先使用 semanage fcontext 添加规则:

sudo semanage fcontext -a -t httpd_sys_content_t “/custom(/.*)?”

这条命令会将自定义路径的上下文类型规则永久性地添加到SELinux的文件上下文配置中。其中,semanage fcontext -a表示用于添加一条新的文件上下文定义;-t httpd_sys_content_t指定要应用的SELinux类型(type);httpd_sys_content_t 类型允许Apache HTTP服务器读取文件,但不允许写入;"/custom(/.*)?"是一个正则表达式,匹配 /custom 目录本身及其下所有文件和子目录。

semanage 命令只是更新了策略配置,并不会更改现有文件的标签。还需要使用 restorecon 命令将这些更改实际应用到文件系统上,要使用的命令是:

sudo restorecon -R -v /custom

其中,-R表示递归操作,处理 /custom 下的所有文件和子目录;-v表示显示详细信息,可以看到哪些文件的上下文被更改了。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐