查看原文
其他

SELinux 入门 pt.2

咸鱼不想秃头 咸鱼运维杂谈 2023-11-07

哈喽大家好,我是咸鱼


在《SELinux 入门 pt.1》中,咸鱼向各位小伙伴介绍了 SELinux 所使用的 MAC 模型、以及几个重要的概念(主体、目标、策略、安全上下文)


我们还讲到:

  • 对于受 SELinux 管制的进程,会先检查 SELinux 策略规则,然后再检查 DAC 规则

  • 对于不受 SELinux 管制的进程,仍然会执行 DAC 规则


也就是说对于受 SELinux 管制的进程而言,想要对文件资源进行操作,需要先经过 SELinux 策略规则的三个关卡


即 SELinux 模式查看——>策略规则比对——>安全上下文比对,然后再经过 DAC 规则中的 rwx 权限比对


过程如下图所示


需要注意的是,并不是所有的程序都会被 SELinux 所管制,被 SELinux 管制的进程主体被称为【受限程序主体】


举个例子,我们看一下 crond 进程和 bash 进程


可以看到,crond 是受限的主体进程(crond_t),而 bash 因为是本机进程,因此就是不受限 unconfined_t 的类型


即 bash 可以直接进行 rwx 权限比对,而不需要进行 SELinux 策略规则比对


接下来我们来分别看一下 SELinux 策略规则比对中的三个关卡



SELinux 运行模式


受限程序主体首先来到第一关:SELinux 运行模式比对


SELinux 有三种运行模式,用于控制系统中进程和文件资源访问的安全性


这三种模式分别是:

  • Enforcing(强制)

这个是默认的模式,在这个模式下 SELinux 正常运行,会强制执行访问控制规则,限制进程和用户对系统资源的访问


如果一个进程试图执行未经授权的操作,如读取或修改受限文件,强制模式会阻止这些操作并记录相关的安全事件


  • permissive(宽松)

在宽松模式下,SELinux 会记录违反访问规则的操作,但不会阻止它们


这允许用户查看哪些操作会受到限制,但不会影响应用程序的正常运行


宽容模式通常用于识别需要修改的规则,以确保应用程序在强制模式下可以正常运行


  • disabled(禁用)

在禁用模式下,SELinux 完全被关闭,不再对进程和文件访问进行任何安全限制


如何查看当前 SELinux 的运行模式?


如果返回结果是 Enforcing,表示当前运行在强制模式;如果是 Permissive,表示运行在宽容模式;如果是 Disabled,表示 SELinux 被禁用


如何切换 SELinux 运行模式?

  • 临时切换


PS:临时切换系统重启后会恢复为默认模式


如果 SELinux 为 disabled 运行模式,表示 SELinux 已经关闭,是无法切换成  Enforcing 模式或 Permissive 模式的


  • 永久切换

如果要永久更改,需要修改配置文件


以 CentOS 7.x 为例


SELINUX 的值更改为 enforcingpermissivedisabled,保存文件然后重启系统



策略与规则


受限主体程序通过第一关之后来到第二关——策略(policy)和规则(rule)比对


可以使用 sestatus 来查看当前 SELinux 使用那些策略



我们可以看到上面的输出中有特别多的 SELinux 规则,但是每个规则中具体是怎么限制的我们却还不知道


我们可以通过 seinfo 等工具进行查看




前面我们知道 crond 进程的类型是 crond_t,那我想知道 crond_t 这个 domain 能够读取那些 type 的文件资源


allow 后面接主体进程以及文件的 SELinux 类型,比如说 crond_t 可以读取 user_cron_spool_t 类型的文件和目录


那如果想要关闭或打开某个 SELinux 规则,该怎么办?



安全上下文


第一关考虑 SELinux 三种运行模式,第二关考虑了 SELinux 的策略规则


现在我们来到了第三关——安全上下文比对


关于安全上下的知识我在《SELinux 入门 pt.1》中已经介绍过了,今天我们着重讲下安全上下文的修改


  • chcon 手动修改

chcon命令的基本语法如下:

chcon [options] context file...

其中,context表示要设置的安全上下文,file...表示要修改的文件或目录路径。下面是一些常用的选项和示例:


-R, --recursive:递归修改指定目录下所有文件的安全上下文-t, --type:指定要设置的新类型标签-u, --user:指定要设置的新用户-r, --role:指定要设置的新角色


举几个例子


  • restorecon 恢复为默认值

使用 chcon命令修改安全上下文可能会导致某些文件和目录的访问权限问题


如果对 SELinux 的运作机制和相应的安全策略不熟悉的,可以使用 restorecon 命令恢复默认的 SELinux 上下文


基本语法如下:


例子如下:




感谢阅读,喜欢作者就动动小手[一键三连],这是我写作最大的动力

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存