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

相关文章

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller

Dubbo之SPI机制的实现原理和优势分析

《Dubbo之SPI机制的实现原理和优势分析》:本文主要介绍Dubbo之SPI机制的实现原理和优势,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Dubbo中SPI机制的实现原理和优势JDK 中的 SPI 机制解析Dubbo 中的 SPI 机制解析总结Dubbo中

Java 的 Condition 接口与等待通知机制详解

《Java的Condition接口与等待通知机制详解》在Java并发编程里,实现线程间的协作与同步是极为关键的任务,本文将深入探究Condition接口及其背后的等待通知机制,感兴趣的朋友一起看... 目录一、引言二、Condition 接口概述2.1 基本概念2.2 与 Object 类等待通知方法的区别

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构