SELinux初探

SELinux初探

自己总结出来的SELinux部分,仅供参考。

SELinux是一个内核模块。

SELinux的运行模式

  • 主体:SELinux主要管理的就是进程,你可以将【主体】跟进程划上等号。
  • 目标:主体进程能否读写的【目标资源】一般就是文件系统。
  • 策略:由于进程与文件数量庞大,因此SELinux会依据某些服务来制定基本的读写安全性策略,这些策略内还会有详细的规则来指定不同的服务是否开放某些资源的读写。目前流行的是三个策略:
    1. targeted:针对网络服务限制较多,针对本机限制较少。是默认的策略。
    2. minimum:由target自定义而来,仅针对选择的进程来保护。
    3. mls,完整的SELinux限制,限制方面较为严格。
  • 使用默认的即可

主体与目标的安全上下文必须一致才能够顺利读写。这个安全上下文有点类似于文件系统的rwx。

顺序:主体程序 -> SELinux(分析策略规则) -> 安全上下文比对 -> 目标数据存取(但能否存取,最终要参考rwx的权限设置)

安全上下文是放在inode内的。

SELinux中三个字段的意义

  • 身份识别

    • unconfined_u:不受限的用户,也就是说,文件来自于不受限的进程。
    • system_u:系统用户,大部分就是系统自己产生的文件。
  • 角色
    通过角色字段,我们可以知道这个数据属于进程文件资源还是代表用户,一般的角色有:

    • object_r:代表的文件或目录等资源,这应该是最常见的。
    • system_r:代表的就是进程,不过,一般用户也会被指定为system_r。

    你也会发现角色的字段最后面使用的是【_r】来结尾,因为是role的意思。

  • 类型【最重要】

    在默认的targeted策略中,前两个基本是不重要的,重要的是这个类型字段。基本上,能不能读取得到就是与这个字段有关了。

    而类型字段在文件与进程方面的定义又不太相同,分别是:

    • type:在文件资源(Object)上面称为类型(Type)。
    • domain:在主体进程(Subject)则称为域(Domain)。

执行的大致顺序

  1. 首先,我们触发一个可执行的文件目标,即具有 cron_exec_t 的这个类型的 /usr/sbin/crond 文件。
  2. 该文件的类型会让这个文件所产生的主体程序(运行在内存中的程序)具有crond这个(Domain),我们的策略针对这个域已经制定了许多规则其中包括这个域可以读取的目标资源类型
  3. 由于crond domain被设置为可读取 system_cron_spool_t 这个类型的目标文件(Object),因此你的配置文件放到 /etc/cron.d/ 目录下,就能够被 crond 那个进程所读取了。
  4. 但最终能不能读取,还要看rwx的具体设置。

SELinux_3种模式的启动、关闭与查看

  • Enforcing:强制模式,代表SELinux运行中,而且已经正确开始限制domain/type。
  • Permissive:宽容模式,代表SELinux运行中,不过仅会提醒而不会阻止。适合用于debug时使用。
  • Disabled:关闭模式,SELinux并没有实际运行。

查看现在的模式
getenforce:就显示出目前的模式为何。


sestatus [-vb]

-v: 检查列于/etc/sestatus.conf内的文件与进程的安全上下文内容。

-b: 将目前策略的规则布尔值列出,亦即某些规则是否要启动之意。

或许可以这样修改

vim /etc/selinux/config里面可以修改策略和目前的启动状态。

如何临时切换状态


setenforce [0|1]

0: 转成Permissive模式

1: 转成Enforcing模式

Enforcing与Disabled的互相转换是需要重启和大量的时间的,但是Enforcing和Permissive就不需要。

SELinux策略内的规则管理

查看SELinux各个规则的布尔值

getsebool [-a] [规则的名称]

-a: 列出目前系统上所有SELinux规则的布尔值状态

例子:[root@study ~]# getsebool -a:查询本系统内所有SELinux规则的布尔值状态。

需要安装setools-console

yum install setools-console


seinfo [-Atrub]

-A: 列出SELinux的状态、规则布尔值、身份识别、角色、类型等所有信息。

-u: 列出SELinux的所有身份识别种类

-r: 列出SELinux的所有角色种类

-t: 列出SELinux的所有类型种类

-b: 列出所有规则的种类(布尔值)

如果你想查询目前所有的身份识别与角色,使用 seinfo -useinfo -r 就知道了。

至于简单的统计数据,直接输入seinfo即可。


sesearch [-A] [-s 主体类型(主题类型就是进程的意思)] [-t 目标类型] [-b 布尔值]

-A: 列出后面数据中,允许【读取或放行】的相关信息

-s: 进程

-t: 后面要接类型,例如 -t httpd_t

-b: 后面还要接SELinux的规则,例如 -b httpd_enable_ftp_server

修改SELinux规则的布尔值

setsebool [-P] [规则名称] [0|1]

-P: 直接将设置的值写入配置文件,该设置信息未来会生效的。

例子

[root@study ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> off
[root@study ~]# setsebool -P httpd_enable_homedirs 1
[root@study ~]# getsebool httpd_enable_homedirs
httpd_enable_homedirs --> on

一定要记的,setsebool要加上-P选项,因这样才能将此设置写入设置文件,这是非常棒的工具。

你一定要知道如何使用getseboolsetsebool才行。

SELinux安全上下文的修改

开始对比SELinux的类型

使用chcon手动修改文件的SELinux属性


chcon [-R] [-t type] [-u user] [-r role] [文件名称]

-R: 连同该目录下的子目录也同时修改

-t: 后面链接安全上下文的类型栏目,例如 httpd_sys_content_t

-u: 后面接身份识别,例如system_u(不重要)

-r: 后面接角色,例如system_r(不重要)

-v: 若有变化成功,请将变动结果列出来

--reference=范例文件:拿某个文件当范例来修改后续接的文件的类型

例子

[root@study ~]# chcon -v -t net_conf_t /etc/cron.d/checktime
changing security context of '/etc/cron.d/checktime'
[root@study ~]# chcon -v --reference=/etc/shadow /etc/cron.d/checktime

restorecon [-Rv] [文件或目录]

-R:连同子目录一起修改

-v:将过程显示到目录

[root@study ~]# restorecon -Rv /etc/cron.d

restorecon可以自动的恢复默认的SELinux类型。

semanage默认目录的安全上下文查询与修改

为什么restorecon可以【恢复】原本的SELinux类型呢,肯定是有一个地方在记录每一个文件、目录的SELinux类型

  1. 如何查询默认的SELinux的类型
  2. 如何增加 修改 删除默认的SELinux类型呢

很简单,通过semanage即可。

[root@study ~]# semanage {login|user|port|interface|fcontext|translation} -l
[root@study ~]# semanage fcontext -{a|d|m} [-frst] file_spec
fcontext:	主要用于安全上下文方面的用途,-l为查询的意思
-a:增加的意思,你可以添加一些目录的默认安全上下文类型设置
-m:修改的意思
-d:删除的意思
[root@study ~]# semanage fcontext -a -t system_cron_spool_t "/srv/mycron(/.*)?"
[root@study ~]# restorecon -Rv /srv/mycron

其他

其他类似于修改端口的条件,也可以用semanage来修改。

[root@study ~]# semanage port -a -t ftp_port_t -p tcp 555
posted @ 2022-12-20 08:45  Y&Qter  阅读(63)  评论(0编辑  收藏  举报