当前位置: 首页 > article >正文

Android15 userdebug版本不能remount

背景描述:

最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中,执行adb root没提示错误,但是没有获取到root权限。

Android设备运行的系统版本有三种情况:user版本、userdebug版本和eng版本。user版本默认是不允许root,userdebug通常是开发调试使用版本可以做root操作。

下面以这个具体的问题出发,说明是如何确定问题的原因以及解决的方法。

先揭晓问题的原因:SELinux状态被设置成了"Enforcing",即SELinux处于强制模式,会限制root权限。

发现问题

如下,adb root执行看着是成功了,但是当执行一些需要root权限的操作时会提示Permission denied。

确认问题

1.确认设备中的系统版本是usedebug

如上,确认设备中跑的系统是userdebug版本。根据以往经验,这种版本一般是能做root操作的。

2.确认是不是root成功

如上,虽然su命令执行提示是“inaccessible or not found”不确能准确说明是“inaccessible”还是“not found”, 但是从命令行提示符可以判断执行操作的用户应该还是普通用户,而非root。正常的root用户如下:

3.检查SELinux状态

SELinux是Android4.3以后引进的Linux安全机制,Enforcing说明SELinux处于强制模式,可能会限制root权限。

至此,基本确定问题原因,接下来就是怎么改的。

解决问题

尝试临时解决

 如上,尝试临时修改的两种方法都因为权限不够失败了。这时候通过命令应该能看到SELinux拒绝相关日志 (关键词:"avc")。

尝试永久解决

根据以往经验,这时通常有两种方法修改SELinux策略为Permissive:

  1. 从bootload阶段,进入到特权模式,然后修改。  这种方法失败了,因为设备有点特殊不像手机能按键选择。
  2. 重新做个android镜像,制作镜像时设置SELinux为Permissive模式

接下来介绍怎么修改,使制作出来的android镜像SELinux模式为Permissive。

修改Android SELinux模式为Permissive步骤

1.修改镜像打包阶段板级配置脚本BoardConfig.mk中BOARD_BOOTCONFIG

如下图,在Android构建源码device/vendorX/platformX/BoardConfig.mk中有如下内容:

 将enforcing改成permissive

2.重新打包bootimage

$cd aosp
$source build/envsetup.sh
$lunch xx_userdebug
$make bootimage

3.替换boot.img到设备

使用fastboot flash刷新bootimg分区,或者使用自研工具替换boot.img到设备

补充:SELinux介绍

三种模式介绍

Disabled(禁用)模式

核心特征:SELinux完全关闭,不提供任何安全保护

行为表现:

  • 内核不加载SELinux策略  
  • 所有访问控制仅依赖传统Linux DAC (自主访问控制)
  • 不生成任何SELinux审计日志

使用场景:

  • 紧急故障排查(如:当SELinux导致系统无法启动时)
  • 性能测试(消除SELinux开销)

重要限制:

  • 从Disabled切换到其他状态必须重启系统
  • 禁用状态下修改的文件可能丢失安全标签

Permissive(宽容)模式

核心特征:只记录不拦截的调试模式

行为表现:

  • 完整加载并解析SELinux策略
  • 检测到策略违规时仅记录到日志而不阻止操作
  • 生成详细的avc:denied审计日志

使用场景:

  • 策略开发和调试阶段
  • 排查权限拒绝问题
  • 收集新策略所需的访问规则

操作命令:

#setenforce 0  #切换到Permissive(无需重启)
#getenforce  #切换成功的话,这里返回“Permissive”

Enforcing(强制)模式

核心特征:完全启用安全保护

行为表现:

  • 加载并强制执行SELinux策略
  • 拦截所有违反策略的操作并记录日志
  • 提供MAC(强制访问控制)保护

使用场景:

  • 生产环境(默认安全配置)
  • 安全敏感应用(金融、企业设备)
  • Google要求Android设备必须默认启用

操作命令:

#setenforce 1  #切换到Enforcing(无需重启)
#getenforce    #成功切换的话,这时返回"Enforcing"

三种模式转换关系

启用SELinux(Disabled->Permissive/Enforcing)必须重启。Permissive <-> Enforcing可通过setenforce实时切换。关闭SELinux(任何状态->Disabled)必须重启。

相关文章:

Android15 userdebug版本不能remount

背景描述&#xff1a; 最近调试Android Vendor Hal的时候发现一个奇怪的现象: android userdebug版本刷到设备中&#xff0c;执行adb root没提示错误&#xff0c;但是没有获取到root权限。 Android设备运行的系统版本有三种情况&#xff1a;user版本、userdebug版本和eng版本…...

R包安装报错解决案例系列|R包使用及ARM架构解决data.table安装错误问题

有不少同学是Mac系统的&#xff0c;分析过程中会发现部分R包总是安装不成功&#xff0c;这是因为部分R包基于windowsx86架构编译的&#xff0c;最常见的就是含 C/C/Fortran 的包&#xff0c;对于初学者都是建议linux和win去做&#xff0c;Windows 通常直接安装预编译好的二进制…...

k8s Headless Service

Kubernetes 无头服务&#xff08;Headless Service&#xff09;配置与使用场景 1.无头服务概述 无头服务&#xff08;Headless Service&#xff09;是 Kubernetes 中的一种特殊服务类型&#xff0c;它**不分配集群 IP&#xff08;ClusterIP&#xff09;&#xff0c;而是直接暴露…...

Linux上安装MongoDB

目录 一、在Linux系统安装MongoDB服务器 1、下载MongoDB 2、上传MongoDB并解压 3、创建必要目录 4、配置环境变量 5、创建配置文件 6、启动命令 7、验证安装 二、在Linux系统安装MongoDB客户端Shell 1、下载MongoDB Shell 2、上传MongoDB Shell并解压 3、配置环境变…...

Redis最佳实践——安全与稳定性保障之访问控制详解

Redis 在电商应用的安全与稳定性保障之访问控制全面详解 一、安全访问控制体系架构 1. 多层级防护体系 #mermaid-svg-jpkDj2nKxCq9AXIW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jpkDj2nKxCq9AXIW .error-ico…...

【华为开发者空间 x DeepSeek】服务器运行Ollama并在本地调用

文章概述 本文介绍了如何在 华为开发者空间 中快速部署并使用 Ollama 模型运行框架&#xff0c;并结合 deepseek-r1 模型进行本地或远程交互推理。内容涵盖环境准备、模型配置、网卡绑定、内网穿透、API调用等多个环节&#xff0c;适合希望在华为云上快速搭建本地类大模型推理…...

Halcon

regiongrowing — Segment an image using regiongrowing. get_obj_class:获取图像的类别名 get_region_points&#xff1a;获取区域的像素 get_contour_xld&#xff1a;获取xld像素点坐标 get_polygon_xld&#xff1a;获取多边形的数据 get_region_polygon:计算一个区域的…...

STM32之IIC(重点)和OLED屏

内部集成电路概述 基本概念 内部集成电路&#xff08;Inter Integrated Circuit&#xff09;的简称叫做IIC或者I2C&#xff0c;是一种简单的、半双工同步通信的串行通信接口&#xff0c;IIC总线是上世纪80年代&#xff08;1982年&#xff09;由飞利浦公司设计出来&#xff0c…...

学习海康VisionMaster之表面缺陷滤波

一&#xff1a;进一步学习了 今天学习下VisionMaster中的表面缺陷滤波&#xff1a;简单、无纹理背景的表面缺陷检测&#xff0c;可以检测表面的异物&#xff0c;缺陷&#xff0c;划伤等 二&#xff1a;开始学习 1&#xff1a;什么表面缺陷滤波&#xff1f; 表面缺陷滤波的核心…...

游戏引擎学习第314天:将精灵拆分成多个层

回顾并为今天的工作做准备 我们今天继续昨天开始的工作&#xff0c;现在我们要回到渲染中处理 Z 值的最终环节。我们目前已经有一个我们认为还算合理的排序方式&#xff0c;虽然可能还需要在接下来的过程中进行一些调整&#xff0c;但总体上已经有了一个明确的方向。 我们已经…...

【学习笔记】深度学习-梯度概念

一、定义 梯度向量不仅表示函数变化的速度&#xff0c;还表示函数增长最快的方向 二、【问】为什么说它表示方向&#xff1f; 三、【问】那在深度学习梯度下降的时候&#xff0c;还要判断梯度是正是负来更新参数吗&#xff1f; 假设某个参数是 w&#xff0c;损失函数对它的…...

【数据结构】图的存储(邻接矩阵与邻接表)

图的存储结构 因为图中既有节点&#xff0c;又有边(节点与节点之间的关系)&#xff0c;因此&#xff0c;在图的存储中&#xff0c;只需要保存&#xff1a;节点和边关系即可。 节点保存比较简单&#xff0c;只需要一段连续空间即可&#xff0c;那边关系该怎么保存呢&#xff1…...

tomcat yum安装

使用yum安装 yum install -y java-1.7.0-openjdk* tomcat* --disablerepoepel## java-1.7.0-openjdk* 注意&#xff1a;最终安装的是java-1.8.0版本## --disablerepoepel 禁用&#xff1a;EPEL源&#xff0c;防止版本冲突 java -version (2) 启停&#xff1a;Tomcat 7 s…...

【Elasticsearch】suggest_mode

suggest_mode 是 Elasticsearch 中 term suggester 和 phrase suggester 的一个参数&#xff0c;用于控制建议的生成方式。它有以下三种模式&#xff1a; 1. missing&#xff1a;默认值。仅对索引中不存在的词项提供建议。如果输入的词已经在索引中存在&#xff0c;则不会生成建…...

数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)

文章目录 数据库只更新特定字段的两种方式&#xff08;先读后写 vs. 动态组织 SQL&#xff09;go语言例子使用GORM的示例&#xff08;最常用的Go ORM库&#xff09;使用SQLx的两种更新方式实现golang SQLx 实现代码&#xff08;动态组织 SQL&#xff09; 数据库只更新特定字段的…...

从翻译后修饰角度解析人工合成途径与底盘细胞的适配性-文献精读136

Compatibility between synthetic pathway and chassis cells from the viewpoint of post-translational modifications 从翻译后修饰角度解析人工合成途径与底盘细胞的适配性 摘要 揭示工程化设计的人工合成途径与底盘细胞整体代谢网络的交互作用及适配性机制是合成生物学研…...

Cesium快速入门到精通系列教程一

一、打造第一个Cesium应用 1、官方渠道下载Cesium&#xff08;可选择历史版本&#xff09; ​​GitHub Releases页面​​ 访问 Cesium GitHub Releases&#xff0c;此处列出了所有正式发布的版本。 通过标签&#xff08;如 v1.95.0&#xff09;选择目标版本&#xff0c;下载…...

[Windows] 剪映 视频编辑处理

附链接&#xff1a;夸克网盘分享&#xff08;点击蓝色字体自行保存下载&#xff09;...

决策树 GBDT XGBoost LightGBM

一、决策树 1. 决策树有一个很强的假设&#xff1a; 信息是可分的&#xff0c;否则无法进行特征分支 2. 决策树的种类&#xff1a; 2. ID3决策树&#xff1a; ID3决策树的数划分标准是信息增益&#xff1a; 信息增益衡量的是通过某个特征进行数据划分前后熵的变化量。但是&…...

stm32 / arduino TPL0401A使用教程

这是在给英国的一个学生讲课时用到的一个芯片&#xff0c;做一个dcdc的反馈电路&#xff0c;刚开始用的不是这个&#xff0c;后来发现国内这个芯片用的挺成熟&#xff0c;就选择了这个。 芯片说明 首先我买的是TPL0401A,我发现淘宝上卖的都是A&#xff0c;其实想用C&#xff0…...

数据结构与算法之单链表面试题(新浪、百度、腾讯)

单链表面试题&#xff08;新浪、百度、腾讯&#xff09; 求单链表中的有效节点的个数 public int getCount(HeroNode head) {Hero1 cur head.getNext();int count 0;while(cur ! null) {count;cur cur.getNext();}return count;}查找单链表中的倒数第k个结点【新浪面试题】…...

单板机8088C语言计划

计划将原来用汇编写的小程序&#xff0c;用C语言重新写一遍 计划2个月能完成 然后再试试&#xff0c;能不能用C写一下固件BootLoad 和一个类似Dos时代的Debug调试器...

一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili pivot() 是 pandas 中用于数据重塑的核心方法&#xff0c;它将长格式数据转换为宽格式数据&#xff0c;与 melt() 方…...

机器学习中无监督学习方法的聚类:划分式聚类、层次聚类、密度聚类

1.定义和特点 2.划分式聚类&#xff1a;K-Means 、 K-Medoids 3.层次聚类&#xff1a;树状图 4.密度聚类&#xff1a;DBSCAN 5.聚类的应用 一、定义和特点 机器学习中的无监督学习聚类是一种通过数据内在结构将样本分组的技术&#xff0c;无需预先标注的类别标签。 它的核心目…...

【HW系列】—溯源与定位—Linux入侵排查

文章目录 一、Linux入侵排查1.账户安全2.特权用户排查&#xff08;UID0&#xff09;3.查看历史命令4.异常端口与进程端口排查进程排查 二、溯源分析1. 威胁情报&#xff08;Threat Intelligence&#xff09;2. IP定位&#xff08;IP Geolocation&#xff09;3. 端口扫描&#x…...

CPO-BP+MOPSO,冠豪猪优化BP神经网络+多目标粒子群算法!(Matlab源码)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CPO-BPNSGA&#xff0c;冠豪猪优化BP神经网络粒子群算法&#xff01;&#xff08;Matlab完整源码和数据&#xff09;&#xff0c;冠豪猪算法优化BP神经网络的权值和阈值&#xff0c;运行环境Matlab2020b及以上。 多…...

模块化设计,static和extern(面试题常见)

文章目录 一、函数的声明和定义1.1 单个文件1.2 多个文件1.3 static和extern1.3.1 static修饰局部变量1.3.2 static修饰全局变量1.3.3 static修饰函数 总结 一、函数的声明和定义 1.1 单个文件 一般我们在使用函数的时候&#xff0c;直接将函数写出来就使用了 题目:写一个函数…...

【快速解决】数据库快速导出成sql文件

1、cmd直接打开 输入命令 mysqldump -u用户名 -p密码 数据库名 > 导出文件名.sql修改成自己mysql的用户名和密码&#xff0c;和要导出的数据库名称&#xff0c;给导出的文件起一个名字。 如图所示 这样就成功了。...

使用 Syncfusion 在 .NET 8 中生成 PDF/DOC/XLS/PPT

Syncfusion 是一个功能强大的控件库&#xff0c;提供了多种工具来生成和处理 PDF、Word、Excel 和 PowerPoint 文档。在 .NET 8 中&#xff0c;使用 Syncfusion 可以简化生成这些文档的流程&#xff0c;并确保生成的文件高效、准确。本文将介绍如何在 .NET 8 中使用 Syncfusion…...

LearnOpenGL-笔记-其十二

今天我们来将LearnOpenGL的高级光照部分彻底完结&#xff1a; Bloom 泛光是一个非常常见的用于改善图像质量的手段&#xff0c;其主要做法就是将某个高亮度区域的亮度向四周发善以实现该区域更亮的视觉效果&#xff08;因为显示器的亮度范围有限&#xff0c;需要通过泛光来体…...