Android selinux权限

一.SE 概述

SELinux 是由美国NSA(国安局)和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。从 fedora core 2开始, 2.6内核的版本都支持SELinux。

在 SELinux 出现之前,Linux 上的使用的安全模型是 DAC( Discretionary Access Control 自主访问控制)。

DAC 的核心思想很简单:进程理论上所拥有的权限与执行它的用户的权限相同。例如,以 root 用户启动 Browser,那么 Browser 就有 root 用户的权限,在 Linux 系统上能干任何事情。

显然,DAD 管理太过宽松,只要想办法在系统上获取到 root 权限就可以了。所以后面有了 SELinux,在 DAC 之外,SELinux设计了一种新的安全模型,叫 MAC(Mandatory Access Control 强制访问控制)。

MAC 的核心思想也很简单:任何进程想在 SELinux 系统上干任何事情,都必须在《安全策略文件》中赋予权限。

实际使用中,Linux 系统先做 DAC 检查。如果没有通过 DAC 权限检查,则操作直接失败。通过 DAC 检查之后,再做 MAC 权限检查。关于 MAC 的安全策略文件,SELinux 有自己的一套规则来编写,这套规则被称之为 SELinux Policy 语言。

SEAndroid:

Google在 Android 4.4 上正式添加以 SELinux 为基础的系统安全机制,命名为SEAndroid。SEAndroid 在架构和机制上与 SELinux 完全一样,基于移动设备的特点,SEAndroid 的只是所以移植 SELinux 的一个子集。SEAndroid 的安全检查覆盖了包括域转换、类型转换、进程相关操作、内核相关操作、文件目录相关操作、文件系统相关操作、对设备相关操作、对app相关操作、对网络相关操作、对IPC相关操作等内容。

selinux访问控制:

二.命令行打开/关闭Selinux

打开selinux:

打开Selinux即将Selinux处于enforcing模式,所以权限事件都会被记录下来并强制执行。

adb root
adb shell setenforce 1
adb shell getenforce
Enforcing           (返回结果)

如果Selinux处于打开状态下,权限事件的log如下, 可以看到permissive=0,即可以确定当前处于enforcing模式,这时候test进程是不可以读取test.json的,会被明确拒绝。

01-01 20:15:07.355  1035  1035 I auditd  : type=1400 audit(0.0:23): avc: denied { read } for comm="test" name="test.json" dev="sda12" ino=25609 scontext=u:r:test:s0 tcontext=u:object_r:test_file:s0 tclass=file permissive=0 

关闭selinux:

关闭Selinux即将Selinux处于permissive模式,所以权限事件都会被记录下来,但不会强制执行。

adb root
adb shell setenforce 0
adb shell getenforce
Permissive     (返回结果)

如果Selinux处于关闭状态下,权限事件的log如下, 可以看到permissive=1,即可以确定当前处于permissive模式,这时候test进程可以读取test.json的,虽然log也打印出来了,但是这个log只是打印出来供用户读取,并不会起到任何拒绝的作用。

01-01 20:15:07.355  1035  1035 I auditd  : type=1400 audit(0.0:23): avc: denied { read } for comm="test" name="test.json" dev="sda12" ino=25609 scontext=u:r:test:s0 tcontext=u:object_r:test_file:s0 tclass=file permissive=1

三.RK3568上关闭selinux

project/device/rockchip/rk356x/xxxx/BoardConfig.mk 

在这个文件中关闭SELINUX,, BOARD_SELINUX_ENFORCING := false;

修改OK后,编译userdebug模式,Selinux已经关闭,但是切换到USER模式后Selinux还是打开状态。

查看代码发现system/core/init/selinux.cpp 有个isEnforcing()方法,

bool IsEnforcing() {if (ALLOW_PERMISSIVE_SELINUX) {return StatusFromCmdline() == SELINUX_ENFORCING;}return true;
}

Android.go 定义ALLOW_PERMISSIVE_SELINUX,默认值是0,debug模式下ALLOW_PERMISSIVE_SELINUX值是1,所以userdebug模式有效果,user模式没有效果,修改下默认值,如下补丁

Index: Android.bp
===================================================================
--- Android.bp    (revision 572)
+++ Android.bp    (revision 573)
@@ -109,7 +109,7 @@"-Wthread-safety","-DALLOW_FIRST_STAGE_CONSOLE=0","-DALLOW_LOCAL_PROP_OVERRIDE=0",
-        "-DALLOW_PERMISSIVE_SELINUX=0",
+        "-DALLOW_PERMISSIVE_SELINUX=1","-DREBOOT_BOOTLOADER_ON_PANIC=0","-DWORLD_WRITABLE_KMSG=0","-DDUMP_ON_UMOUNT_FAILURE=0",

编译android后,关闭Selinux成功。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络模型里面权重衰减的理解

概述 神经网络模型里面,如果少部分参数的绝对值相对其他值过大,就会造成模型过度依赖于某些特征(由这些较大值所代表),从而更容易产生过拟合问题。因而,我们有必要针对权重设置一种衰减措施,避…

PHP ASCII码的字符串用mb_convert_encoding 转utf-8之后不生效

检测数据类型是ascii,转码之后再检测还是utf-8没生效 private function toUTF8($str){$encode mb_detect_encoding($str, array("ASCII",UTF-8,"GB2312","GBK",BIG5,LATIN1));if ($encode ! UTF-8) {$str1 mb_convert_encoding($str, UTF-8, …

个人银行账户管理程序(2)

在(1)的基础上进行改进 1:增加一个静态成员函数total,记录账户总金额和静态成员函数getTotal 2对不需要改变的对象进行const修饰 3多文件实现 account。h文件 #ifndef _ACCOUNT_ #define _ACCOUNT_ class SavingAccount {pri…

力扣经典150题第五十三题:基本计算器

目录 力扣经典150题第五十六题:基本计算器示例提示解题思路 力扣经典150题第五十六题:基本计算器 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数&#xf…

C#中环境变量

环境变量 什么是环境变量Environment.GetEnvironmentVariable 用于获取指定环境变量的值怎么知道环境变量存不存在?不存在怎么创建? 什么是环境变量 环境变量是操作系统中存储的一种机制,用于保存与操作系统环境和应用程序运行相关的配置信息…

HTML 建立列表——列表标签

HTML 建立列表——列表标签 建立和使用列表 定义列表 <dl></dl>列表标签定义列表; <dt>定义列表标题; <dd>定义列表内容; 说明: 1. dt和dd对应着的, 一个dt可以对应着多个dd; 2. dd完全是为了dt服务的, 对标题进行描述; 实例: <dl> <…

NPM 基础

介绍 npm 是 JavaScript 编程语言的一个包管理器&#xff0c;它允许开发者安装、共享和管理依赖项。npm 与 Node.js 紧密集成&#xff0c;是 Node.js 生态系统中不可或缺的一部分。它提供了一个命令行工具&#xff0c;使得开发者能够轻松地安装、配置和管理项目所需的各种包。…

抓包证书安装到安卓7.0+手机

前言: 首先理解一下,这个不只是证书到浏览器,而是抓包证书到安卓7.0+手机上的文章; 还有一点区分,在浏览器上装的证书,只是让抓包工具可以抓取手机浏览器的包,而不是抓取手机app上的包; 如果你的证书只是简单的在浏览器下进行安装,那么你的手机app是走不了代理网络的…

【微服务】服务保护(通过Sentinel解决雪崩问题)

Sentinel解决雪崩问题 雪崩问题服务保护方案服务降级保护 服务保护技术SentinelFallback服务熔断 雪崩问题 在微服务调用链中如果有一个服务的问题导致整条链上的服务都不可用&#xff0c;称为雪崩 原因 微服务之间的相互调用&#xff0c;服务提供者出现故障服务的消费者没有…

【微服务】配置管理

Nacos配置管理 配置管理配置共享配置热更新 配置管理 将微服务集群中常用&#xff0c;经常变化的配置都写到一个独立的配置文件微服务中进行统一管理 配置共享 在Nacos的界面当中进行配置管理&#xff0c;在配置列表中添加配置 比如各个服务中的jdbc的连接配置&#xff1a; …

HTML/CSS1

1.前置说明 请点这里 2.img元素 格式&#xff1a; <img src"图片地址" alt"占位文字" width"图片宽度" height"图片高度">其中alt是当图片加载失败时显示的文字 而且不同内核的浏览器显示出来的占位文字的效果也是不尽相同的…

linux修改max user processes/file limits

1、修改普通用户单个用户可同时运行的最大进程数 &#xff08;默认为 4096 &#xff09; [rootxxx devops]# cat /etc/security/limits.d/20-nproc.conf # Default limit for number of users processes to prevent # accidental fork bombs. # See rhbz #432903 for reasoni…

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…

游戏后端开发初体验(一)

时间过得很快&#xff0c;一转眼&#xff0c;4月已然过去&#xff0c;迎来了5月。我也完成了第一个月的工作。五一假期没有出游计划&#xff0c;于是想趁这个机会&#xff0c;写下这个月的工作感想&#xff0c;也算是践行“记录即最好的回忆”。 工作环境和日常琐事 公司位于…

Servlet_JSP

1.一些回顾 对于Tomcat部署中 我们有一些补充的点需要在此说明一下 1.如果我们想要查询MINEType的话 可以到TOMCAT_HOME/conf/web.xml中进行查询 里面记录了不同类型对应的MINEType 2.我们客户端发送请求数据给服务器之后 服务器会调用父类中的service方法 然后在内部决定调用…

CMakeLists.txt语法规则:while 循环

一. 简介 前面几篇文章学习了 CMakeLists.txt语法中的一种循环写法&#xff0c;文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;foreach 循环基本用法-CSDN博客 CMakeLists.txt语法规则&#xff1a;foreach循环的关键字-CSDN博客 本文学习 while循环写法。 二. …

Day08-JavaWeb开发-MySQL(多表查询内外连接子查询事务索引)Mybatis入门

1. MySQL多表查询 1.1 概述 1.2 内连接 -- 内连接 -- A. 查询员工的姓名, 及所属的部门名称(隐式内连接实现) select tb_emp.name, tb_dept.name from tb_emp,tb_dept where tb_emp.dept_id tb_dept.id;-- 起别名 select * from tb_emp e, tb_dept d where e.dept_id d.id…

tomcat+maven+java+mysql图书管理系统2-完善项目结构,添加相关依赖

1.创建java目录 接着选择java&#xff0c;回车&#xff0c;则创建成功&#xff0c;成功后在左侧栏能看见 2.修改pom.xml文件,(添加依赖) <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

Thinkphp5 实现 redis 数据缓存

在ThinkPHP 5中&#xff0c;你可以使用Redis作为数据缓存的解决方案。Redis是一个开源的内存数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中介。下面是在ThinkPHP 5中实现Redis数据缓存的基本步骤&#xff1a; 1. 安装 Redis 扩展 首先&#xff0c;你需要在你的…

vs 2022 Xamarin 生成 Android apk

再保存&#xff0c;如果没有生成apk就重启软件 再试一次