Selinux机制简介

2024-06-09 05:28
文章标签 机制 简介 selinux

本文主要是介绍Selinux机制简介,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

理解DAC各MAC

SELinux简介

标签、规则各域

标签

规则

SELinux的运行模式

SELinux Policy

TEAC

RULE_VARIANT

SOURCE_TYPES&TARGET_TYPES

Type

Attribute

PERMISSIONS

CLASSES

RBAC

role

user

constrain

MLS

Security level

mlsconstrain

Android SELinux code

目录文件

编译

添加sepolicy

如何确认是否是selinux问题

使用audit2allow

Q&A


理解DAC各MAC

Linux下默认的访问控制是DAC(Discretionary Access Control,自主访问控制),其特点是资源的拥有者可以对他进行任何操作(读、写、执行)。当一个进程准备操作资源时,Linux内核会比较进程和资源的UID和GID,如果权限允许,就可以进行相应的操作。此种方式往往会带来一些问题,如果一个进程是以root的身份运行,也就意味着他能够对系统的任何资源进行操作,而且不被限制。 假如我们的软件存在漏洞呢?这个往往是一个灾难性的问题。因此,就引出了另外的一种安全访问控制机制MAC(Mandatory Access Control,强制访问控制),Linux下的一种实现是SELinux,任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限,凡是没有出现在安全策略配置文件中的权限,进程就没有该权限。

SELinux简介

Security Enhanced Linux(SELinux) 为Linux 提供了一种增强的安全机制,其本质就是回答了一个“Subject是否可以对Object做Action?”的问题,例如 Web服务可以写入到用户目录下面的文件吗?其中Web服务就是Subject而文件就是Object,写入对应的就是Action。

理解selinux的核心思想

  • Subject:在SELinux里指的就是进程,也就是操作的主体。
  • Object: 操作的目标对象,例如文件
  • Action: 对Object做的动作,例如 读取、写入或者执行等等
  • Context: Subject和Object都有属于自己的Context,也可以称作为Label。Context有几个部分组成,分别是SELinux User、SELinux Role、SELinux Type、SELinux Level

用户程序执行的系统调用(例如读取文件),都要被SELinux依据安全策略进行检查。如果安全策略允许操作,则继续,否则将会抛出错误信息给应用程序。SELinux决策的同时还需要Subject和Object的Context信息,确定所属的User、Role和Type等信息,以此查询对应的安全策略进行决策

标签、规则各域

SELinux 依靠标签来匹配操作和规则。标签用于决定允许的事项,系统中,无论是文件、进程,还是套接字等都拥有标签。SELinux 在做决定时需参照两点:

1)这些对象分配的标签

2)定义这些对象如何交互的规则

标签

在 SELinux 中,设置或分配SContext给进程或文件的工作叫Security Labeling(打标签),一般采用以下形式:

user:role:type:mls_level

其中,type 是访问决定的主要组成部分,可通过构成标签的其他组成部分进行修改。对象会映射到类,对每个类的不同访问类型由权限表示。

user

system_u:表示系统程序

user_u:代表的是一般使用者账号相关的身份

role

object_r:代表的是文件或目录等文件资源

system_r:代表的是进程

type

type:在文件资源(object)上面称为类型(type)

domain:在主体进程(subject)则称为域(domain)(可理解为进程的type)

mls_level

此字段也可以称为级别,并且仅在策略支持MCS或MLS时才显示。该条目可以包括:

  • 单个安全级别,其中包含敏感级别和零个或多个类别 (例如s0,s1:c0,s7:c10.c15)
  • 由两个安全级别(低和高)组成的范围,两个安全级别之间用连字符分

SEAndroid中的MLS(Multi Level Security)的sensitivity level只有一个,即s0。

举例:

1.显示进程的标签ps -Z

Tset:/ $ ps -Z

LABEL        USER     PID   PPID       VSZ   RSS       WCHAN ADDR  S  NAME

u:r:shell:s0 shell 10545 19205 2130828 3260 __do_sys_+         0   S         sh

u:r:shell:s0 shell 10552 10545 2133284 3548                 0        0   R         ps

2.显示文件的标签ls -Z

Test/vendor/etc/camera $ ls -Z
u:object_r:vendor_configs_file:s0 cache
u:object_r:vendor_configs_file:s0 camxoverridesettings.txt
u:object_r:vendor_configs_file:s0 camxoverridesettingsOfPro.txt
u:object_r:vendor_configs_file:s0 com.xxxx.dcal.wt.golden
u:object_r:vendor_configs_file:s0 com.xxxx.dcal.wt.pro.golden
u:object_r:vendor_configs_file:s0 com.xxxx.dcal.wu.golden
u:object_r:vendor_configs_file:s0 com.xxxx.dcal.wu.pro.golden

3.chcon 命令修改文件标签(SContext)chcon CONTEXT files

举例:

#查看camxoverridesettings.txt当前的context Test:/vendor/etc/camera # ls -Z camxoverridesettings.txt u:object_r:vendor_configs_file:s0 camxoverridesettings.txt

#chcon修改 context 为vendor_file Test:/vendor/etc/camera # chcon u:object_r:vendor_file:s0 camxoverridesettings.txt

#查看修改后的context Test:/vendor/etc/camera

# ls -Z camxoverridesettings.txt u:object_r:vendor_file:s0 camxoverridesettings.txt

#restorecon 命令更改回原来的标签类型 会重新load定义它context的文件 Test:/vendor/etc/camera # restorecon ./camxoverridesettings.txt SELinux: Loaded file_contexts

#再次查看camxoverridesettings.txt文件的标签 Test:/vendor/etc/camera # ls -Z camxoverridesettings.txt u:object_r:vendor_configs_file:s0 camxoverridesettings.txt

除使用以上格式进行labeling之外,还有其他关键词。例如,

genfscon

genfs中的gen为generalized的意思,一般对/目录,proc目录,sysfs等使用genfscon关键词进行Labeling

举例:

system/sepolicy/private/genfs_contexts

# Label inodes with the fs label.

genfscon rootfs / u:object_r:rootfs:s0

# proc labeling can be further refined (longest matching prefix).

genfscon proc / u:object_r:proc:s0

genfscon proc /asound u:object_r:proc_asound:s0

genfscon proc /buddyinfo u:object_r:proc_buddyinfo:s0

规则

规则采用如下形式:

allow domains types:classes permissions;

其中:

Domain - 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型。

Type - 一个对象(例如,文件、套接字)或一组对象的标签。

Class - 要访问的对象(例如,文件、套接字)的类型。

Permission - 要执行的操作(例如,读取、写入)。

SELinux的运行模式

SELinux 有三个运行模式,分别是disabled, permissive 和 enforcing

  • Disable: 禁用SELinux,不会给任何新资源打Label,如果重新启用的话,将会给资源重新打上Lable,过程会比较缓慢。
  • Permissive:如果违反安全策略,并不会真正的执行拒绝操作,但会有拒绝信息写入日志。
  • Enforcing: 默认模式,SELinux的正常状态,会实际禁用违反策略的操作

使用命令行更改SELinux模式

#查看当前的运行状态 adb shell getenforce #临时改变运行状态为Permissive adb shell setenforce 0 #临时改变运行状态为 Enforcing adb shell setenforce 1

这篇关于Selinux机制简介的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1044324

相关文章

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

一文详解Java Condition的await和signal等待通知机制

《一文详解JavaCondition的await和signal等待通知机制》这篇文章主要为大家详细介绍了JavaCondition的await和signal等待通知机制的相关知识,文中的示例代码讲... 目录1. Condition的核心方法2. 使用场景与优势3. 使用流程与规范基本模板生产者-消费者示例

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取