Linux(入门基础):96---SELinux简介、策略、安全上下文

一、自主访问控制、强制访问控制

  • 自主访问控制(DAC):一个文件是否可以被某个进程读写操作,只取决于rwx的权限
  • 强制访问控制(MAC):DAC设置针对特定的进程与特定的文件资源来管理权限。一个进程能否操作某个文件,取决于这个进程与这个文件的策略。

二、SELinux的概念

  • Security Enhanced Linux的英文缩写,字面的意思就是强化的Linux之意
  • SELinux是整合到内核的一个模板,并且SELinux就是采用MAC来管理进程与文件的
  • centos默认开启SELinux

三、SELinux的运行模式

  • 主体:SELinux主要管理的就是进程,因此主体就是进程
  • 目标:相对于上面的进程所能访问读写的目标资源
  • 策略:主体与目标之间的策略,用于进程与文件之间的操作

四、SELinux的三种策略

  • targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略
  • minimum:由target自定义而来,仅针对选择的进程来保护
  • mis:完整的SELinux限制,限制方面比较严格

建议使用默认的targeted策略即可

五、安全上下文

1.概念

  • 进程能否操作一个文件,与进程和文件之间的策略有关,这个策略就是安全上下文

2.特点

  • 安全上下文是放置到文件的inode内的,因此主体想要读取目标文件资源时,同样需要读取inode
  • 安全上下文类似于文件的rwx权限,取决于一个进程能否操作这个文件
  • 安全上下文只是控制一个进程能否操作这个文件。但最终这个文件能否被这个进程所使用,还是取决于文件的rwx权限

3.安全上下文的查看(ls  -Z)

红圈内的信息就是安全上下文,可以分为三部分

第一部分:身份识别
  • system_u:系统用户,大部分就是系统自己产生的文件
  • unconfined_u:这个文件来自于不受限的进程例如:我们使用可登录账号获取bash之后,默认的bash环境不受SELinux管制,因此这个bash进程所产生的文件,其身份识别大多就是unconfined_u
第二部分:角色
  • object_r:代表这个数据是文件/目录等资源,是最常见的
  • system_r:代表这个数据是进程,不过,一般用户也会被指定为system_r
第三部分:类型

这个部分是最重要的,因为一个进程能否读取到这个文件资源就与这个字段有关。只有进程的域与文件的类型相匹配时,SELinux才会对进程放行,然后让进程可以操作这个文件

  • type:在文件资源上面这个地方成为类型
  • domain:在进程上面则成为域(若为unconfined_t,代表该进程不受SELinux的限制)

 六、查看进程的安全上下文(ps  -eZ)

进程大概分为两个类型

  • unconfined_u:unconfined_r  ==>一般都是可登录用户的进程,比较没有限制的进程之意。大多是用户已经顺利登录系统后,所用来操作系统的进程,比如basg、X Window相关软件等
  • system_u:system_r  ==>大多是系统进程,因此是非交互式的系统运行进程

七、安全上下文的案例

1.下面我们拿:/usr/sbin/crond  /etc/crontab  /etc/cron.d这三者来举例

  • /usr/sbin/crond是一个程序,当执行这个程序之后,就会产生crond服务进程,图一为crond服务进程
  • /etc/crontab  /etc/cron.d这两个都是文件,可以被crond服务进程所操作

2.承上,解释说明为什么crond进程可以操作/etc/crontab  /etc/cron.d等这些文件

  • 第一步:当开启crond_exec_t这个类型的/usr/sbin/crond程序后,就会产生一个域为crond_t的crond进程
  • 第二步:域为crond_t的进程可以读取类型为system_cron_spool_t的目标文件
  • 第三步:图中/etc/crontab  /etc/cron.d这两个文件都是system_cron_spool_t类型的,因此能够被crond进程所操作
  • 第四步:当然,最终crond能否读写/etc/crontab  /etc/cron.d这两个文件,还是与这两个文件的rwx权限有关

3.我们创建一个类型不是system_cron_spool_t的文件在/etc/cron.d目录下,然后重启crond服务,看看crond服务能否操作这个文件

  • 第一步:我们在家目录下建立一个测试文件,然后移动到/etc/cron.d目录下

  • 第二步:强制重新启动crond服务,然后看一下日志文件

systemctl restart crond

tail  /var/log/cron

八、查看进程是否被SELinux所管控

  • 概念:并不是所有的进程都被会SELinux所管制。因此查看进程的第三字段的内容就可以知道该进程能否被SELinux所管控
  • 从下图可以看到bash的第三字段为unconfined_t,代表bash是不受SELinux限制的进程,所以bash不会被SELinux所管控,而直接去与文件进行操作

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/88430369