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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

业务协同平台--简介

一、使用场景         1.多个系统统一在业务协同平台定义协同策略,由业务协同平台代替人工完成一系列的单据录入         2.同时业务协同平台将执行任务推送给pda、pad等执行终端,通知各人员、设备进行作业执行         3.作业过程中,可设置完成时间预警、作业节点通知,时刻了解作业进程         4.做完再给你做过程分析,给出优化建议         就问你这一套下

【Tools】大模型中的自注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 自注意力机制(Self-Attention)是一种在Transformer等大模型中经常使用的注意力机制。该机制通过对输入序列中的每个元素计算与其他元素之间的相似性,

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

【Tools】AutoML简介

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 AutoML(自动机器学习)是一种使用机器学习技术来自动化机器学习任务的方法。在大模型中的AutoML是指在大型数据集上使用自动化机器学习技术进行模型训练和优化。

【Tools】大模型中的注意力机制

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样                      🎵 方芳《摇太阳》 在大模型中,注意力机制是一种重要的技术,它被广泛应用于自然语言处理领域,特别是在机器翻译和语言模型中。 注意力机制的基本思想是通过计算输入序列中各个位置的权重,以确