安全利器SELinux快速入门系列SELinux基础入门

Posted 机器未来

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全利器SELinux快速入门系列SELinux基础入门相关的知识,希望对你有一定的参考价值。

这是机器未来的第35篇文章

原文首发地址:https://blog.csdn.net/RobotFutures/article/details/125914553

文章目录

1. 研究目标

在智能驾驶越来越普及的今天,如何保证车载设备的安全,如何保证分配的权限是最合适的,不会出现越权访问?如何保证对外接口访问用户的权限是高度可控的?在应用程序被攻击后,如何保证黑客不能拿到超越进程的权限?

来看看selinux如何解决这个问题。

2. selinux是什么?

SELinux是Security-Enhanced Linux的简称,字面意思是强化版的安全Linux,它是Linux的安全子系统,由美国国家安全局NSA开发,是强制访问控制MAC的实现, Linux历史上最杰出的新安全子系统。

3. 为什么要有selinux,它解决了什么问题?

用过linux系统的人知道,文件是有访问权限控制的,读、写、执行,还有用户、组权限的控制,文件的权限控制通过文件来实现的方式,被成为DAC,自主访问控制。这种方式存在2个问题:
(1)超级用户root拥有所有的权限,假如我们的软件存在漏洞呢?这个往往是一个灾难性的问题;
(2)使用者可以通过程序变更文件的访问权限,如果配置为777,那么任何人都可以访问;

针对这2个问题,提出了MAC强制访问权限控制,可以针对特定的程序与特定的文件资源来进行权限的控管,控制的主体不再是使用者,而是程序,即使是root用户也不能任意访问文件,相对于DAC,MAC的权限访问的颗粒度更细了。

4 selinux的实现原理是怎样的,为什么它能?

4.1 主体与客体

访问控制包括三个要素:主体、客体和控制策略。
(1)主体S(Subject)。是指提出访问资源具体请求。是某一操作动作的发起者,但不一定是动作的执行者,可能是某一用户,也可以是用户启动的进程、服务和设备等。
(2)客体O(Object)。是指被访问资源的实体。所有可以被操作的信息、资源、对象都可以是客体。客体可以是信息、文件、记录等集合体,也可以是网络上硬件设施、无限通信中的终端,甚至可以包含另外一个客体。
(3)控制策略A(Access Control Policy)。是主体对客体的相关访问规则集合,即属性集合。访问策略体现了一种授权行为,也是客体对主体某些操作行为的默认。

4.2 自主访问控制DAC实现的原理

DAC的主体是使用者,客体是被访问的资源。

DAC访问策略下,文件的拥有者可以自主地说明它所拥有的资源允许系统中的哪些用户以何种权限进行共享。
linux下的文件是基于权限位实现的访问控制
执行一下ls -l查看目录下的文件列表,可以看到一行信息最左侧的就是访问权限位

zhoushimin@zsm:tools$ ls -l
total 728236
drwxrwxr-x. 1 zhoushimin zhoushimin       454 Jul  6 20:20  anaconda3
-rw-rw-r--. 1 zhoushimin zhoushimin 667976437 Jul  2 15:56  Anaconda3-5.3.1-Linux-x86_64.sh
-rwxrwxr-x. 1 zhoushimin zhoushimin       244 Jul 19 10:41  clean_snaps.sh
-rwxr--r-x. 1 zsm2       zhoushimin       244 Jul 19 10:41  clean_snaps2.sh
-rw-rw-r--. 1 zhoushimin zhoushimin    983655 Jul 13 14:38 'LTE&LTE-A_QFlash_Linux&android_V2.0.zip'
lrwxrwxrwx. 1 zhoushimin zhoushimin        20 Jul 10 00:12  picgo -> PicGo-2.2.2.AppImage
-rwxrwxr-x. 1 zhoushimin zhoushimin  69324801 Jul  3 00:57  PicGo-2.3.0.AppImage
drwxrwxr-x. 1 zhoushimin zhoushimin       284 Jul 18 10:44  platform-tools
-rw-rw-r--. 1 zhoushimin zhoushimin   7406632 Jul 18 10:44  platform-tools_r33.0.2-linux.zip
drwxrwxr-x. 1 zhoushimin zhoushimin       890 Jul 13 14:18  QFlash_Linux_Android
drwxr-xr-x. 1 root       root             324 Jul  4 11:19  Qt

以第3个文件clean_snaps.sh为例,它的权限位信息为-rwxrwxr-x,权限位3位一组,拆分rwx,rwx,r-x,分别代表文件的所有者的访问权限、文件所有者所在组的访问权限、其它用户的访问权限。r代表读、w代表写、x代表执行,-代表无权限。

那么用户zhoushimin对clean_snaps2.sh文件有什么访问权限呢?

首先先查看该用户的用户组信息

# 查看用户、用户组信息
zhoushimin@zsm:tools$ id zhoushimin
uid=1000(zhoushimin) gid=1000(zhoushimin) groups=1000(zhoushimin),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),132(lxd),133(sambashare)

可以看到clean_snaps2.sh文件属于zsm2用户,它的组为zhoushimin,zhoushimin用户的组信息从id zhoushimin输出可知,也是zhoushimin,那么用户zhoushimin和zsm2在同一个组,那么zhoushimin拥有clean_snaps2.sh属主的访问权限,为r–(注:rwxr–r-x为其访问控制的权限位,从左到右,rwx为属主的权限,r–为属组的权限,r-x为其它用户的权限)。

4.3 强制访问控制MAC实现的原理

4.3.1 原理概述

进程的主体是进程,客体是被访问的资源。

MAC机制的特点在于,资源的拥有者,并不能决定谁可以接入到资源。具体决定是否可以接入到资源,是基于安全策略。而安全策略则是有一系列的接入规则组成,并仅有特定权限的用户有权限操作安全策略。

4

MAC强制访问控制的流程大致是上图所示,分为3个步骤

  • 主体程序必须要通过 SELinux 政策内的规则放行后,就可以与目标资源进行安全性本文的比对;
  • 若比对失败则无法存取目标,若比对成功则可以开始存取目标。
  • 最终能否存取目标还是与文件系统的 rwx 权限设置有关

简单来说,主体有政策规则权限还不够,还需要进程和文件的安全上下文匹配之后,最终和DAC访问控制逻辑一样,匹配文件的rwx的权限后才可以访问,如下图所示:

4.3.2 安全上下文Security Context

什么是Context,它被成为安全上下文,分为进程安全上下文和资源的安全上下文(文件),只有两者的安全上下文匹配了,进程才可以访问文件

那么安全上下文是什么样的呢?

  • SELinux User:每一个Linux用户都会映射到SELinux用户,每一个SELinux User都会对应相应的Role。
  • SELinux Role:每个Role也对应几种SELinux Type,并且充当了User和Type的‘中间人’
  • SELinux Type:安全策略使用SELinux Type制定规则,定义何种Domian(Type)的Subject,可以接入何种Type的Object。
  • SELinux Level:安全级别

先来看一下进程的安全上下文:

zhoushimin@zsm:Desktop$ ps -auxZ | grep typora
system_u:system_r:initrc_t:s0   zhoushi+   49036  0.2  0.8 38271896 141120 ?     Sl   11:47   0:20 /usr/share/typora/Typora

在原来的查看进程的命令参数中添加Z选项即可查询进程的安全上下文信息。上面的例子的安全上下文信息为system_u:system_r:initrc_t:s0,其构成为selinux用户、selinux角色、域domain、级别mls:s0

再来看一下文件的安全上下文:

zhoushimin@zsm:~$ ls -lZ
-rw-rw-r--. 1 zhoushimin zhoushimin system_u:object_r:user_home_dir_t:s0      585756 Jul 20 15:26 2022-07-20-14-07-09.log

同样的,在ls -l的基础上添加Z选项即可查看文件的security context,其上下文为system_u:object_r:user_home_dir_t:s0,对应的selinux用户为system_u、selinux角色object_r,类型Type为user_home_dir_t,安全级别为S0。

类型字段在文件与程序的定义不太相同,分别是:

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

这几项数据不太好区分,可以看他们后缀:

  • system_u: 后缀为u,代表为selinux用户user
  • object_r:后缀为r,达标为selinux角色role
  • user_home_dir_t:后缀为t,达标为selinux类型或域
  • s0:s开头的达标mls安全级别。MAC 细分为两种方式,一种叫类别安全(MCS)模式,另一种叫多级安全(MLS)模式,mls级别仅在MLS模式下生效

更多安全上下文信息可以看这个对照表:

说完安全上下文,那么如何才能让安全上下文生效呢?可以通过配置selinux的工作模式来启用。

4.3.3 selinux工作模式

selinux有三种工作模式:

  • enforcing:强制模式。违反 SELinux 规则的行为将被阻止记录到日志中
  • permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用, 首次开启建议先配置为permissive,特别在PC上,防止进不了系统
  • disabled:关闭 SELinux,直接去匹配文件系统的rwx权限。

SELinux 的三种类型与实际运行流程图:

了解了安全上下文,那么它到底是怎样的匹配规则呢,进程和文件的安全上下文如何匹配呢?接下来了解一下selinux的策略类型。

4.3.4 selinux的策略类型

selinux支持三种策略:targeted(default)、mls、src三种。

  • targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策。在targeted策略类型下,安全上下文仅比对domain/type即可,selinux用户和selinux角色字段不匹配。
  • minimum:由 target 修订而来,仅针对选择的程序来保护!
  • mls:完整的 SELinux 限制,限制方面较为严格。建议使用默认的 targeted 政策即可

原理讲了挺多的,主要核心点就是策略Policy、安全上下文security context,那么实际是如何使用的呢?请看下一章,SELinux使用实战。

参考文献:

写在末尾:

  • 博客简介:专注AIoT领域,追逐未来时代的脉搏,记录路途中的技术成长!
  • 专栏简介:从0到1掌握SELinux的使用。
  • 面向人群:嵌入式Linux软件工程师
  • 专栏计划:接下来会逐步发布跨入人工智能的系列博文,敬请期待

以上是关于安全利器SELinux快速入门系列SELinux基础入门的主要内容,如果未能解决你的问题,请参考以下文章

SELinux入门

SELinux入门

SELinux入门基础

基础运维:SELINUX入门到掌握

SELinux 入门简介

selinux入门和基本配置