Android15 userdebug版本不能remount

article/2025/6/18 23:12:26

背景描述:

最近调试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)必须重启。


http://www.hkcw.cn/article/GqiasnRhRd.shtml

相关文章

伊朗外长:将适当回应美方核谈判提案

△伊朗外交部长阿拉格齐(资料图)当地时间5月31日,伊朗外交部长阿拉格齐在社交平台表示,当天阿曼外交大臣巴德尔访问伊朗并向其介绍了美方有关核谈判的提案。阿拉格齐表示,伊朗将根据原则、国家利益和伊朗人民的权利对此作出适当的回应。白宫新闻秘书莱维特当地时间31日表示…

27 C 语言编程核心:main 主函数(基本形式、返回值、参数、命令行传参)、多文件编程实践

1 main 主函数 1.1 主函数的作用 在 C 语言中&#xff0c;main 主函数是程序的入口函数&#xff0c;所有 C 程序必须包含一个名为 main 的函数。程序总是从该函数开始执行&#xff0c;没有它程序就无法启动。 主函数可以调用其他函数。其他函数不能调用主函数。主函数不能调用…

GIS常见数据及主要应用综述:类型解析、应用案例与未来趋势全景解读

&#x1f30f; GIS常见数据及主要应用综述&#xff1a;类型解析、应用案例与未来趋势全景解读 地理信息系统&#xff08;GIS&#xff09;是支撑空间决策、资源管理、城市治理的重要技术体系。本文从常见数据类型入手&#xff0c;结合中国及国际资源&#xff0c;梳理典型GIS应用…

系统性学习C语言-第十二讲-深入理解指针(2)

系统性学习C语言-第十二讲-深入理解指针&#xff08;2&#xff09; 1. const 修饰指针1.1 const 修饰变量1.2 const 修饰指针变量 2. 野指针2.1 野指针成因2.2 如何规避野指针2.2.1 指针初始化2.2.2 小心指针越界2.2.3 指针变量不再使用时&#xff0c;及时置 NULL &…

Linux安装redis

Linux redis路径 https://download.redis.io/releases/解压安装Redis 解压 tar -zvxf redis-6.0.5.tar.gz 由于redis是c语言编写的&#xff0c;所以我们需要先安装gcc&#xff0c;安装的命令如下&#xff1a; yum install gcc-c安装 输入命令&#xff1a; make PREFIX/usr/…

NumPy 数组计算:广播机制

文章目录 NumPy 数组计算&#xff1a;广播机制一、广播机制简介二、广播机制的规则1. 广播机制示例 12. 广播机制示例 23. 广播机制示例 3 三、广播机制实战1. 数组的中心化2. 绘制二维函数 NumPy 数组计算&#xff1a;广播机制 我们在NumPy数组的计算&#xff1a;通用函数中看…

Codesys FOR 循环之轴控

关于多伺服的轴控,不管怎么写都会很复杂,要么编程的时候代码行数多,要么是后期检查时非常麻烦,目前还未找到一个两全其美的方法,今天介绍的是通过FOR循环的轴控,就属于后者,代码行数较少,控制的轴数也没有限制,不需要一个轴一个的复制FB块,但是想在调试的时候实时查看…

欧冠决赛杜埃梅开二度 新星闪耀赛场

北京时间6月1日,本赛季的欧冠决赛中,19岁的杜埃表现出色,梅开二度并送出一次助攻,帮助巴黎圣日耳曼在比赛进行到73分钟时以4-0领先国际米兰。据统计,杜埃成为自1964年国际米兰名宿桑德罗-马佐拉以来,首位在欧冠决赛中完成梅开二度并且送出助攻的球员。本赛季,杜埃代表巴…

使用VSCode在WSL和Docker中开发

通过WSL&#xff0c;开发人员可以安装 Linux 发行版&#xff08;例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等&#xff09;&#xff0c;并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具&#xff0c;不用进行任何修改&#xff0c;也无需使用传统虚…

《汇编语言》第12章 内中断——实验12 编写0号中断的处理程序

编写0号中断的处理程序&#xff0c;使得在除法溢出发生时&#xff0c;在屏幕中间显示字符串"divide error&#xff01;"&#xff0c;然后返回到DOS。 要求&#xff1a;仔细跟踪调试&#xff0c;在理解整个过程之前&#xff0c;不要进行后面课程的学习。 ;sy12.asm …

黑马k8s(十八)

一&#xff1a;安全认证 1.安全认证-概述 2.安全认证-认证方式 认证管理 3.安全认证-授权管理 因为没有授予角色deployment的权限&#xff0c;所以不能查看 4.安全认证-准入控制 二&#xff1a;DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的…

python:PyMOL 使用教程 及实用示例

安装参阅&#xff1a;开源版PyMol安装保姆级教程 百度网盘下载 提取码&#xff1a;csub 简介: PyMOL是一个Python增强的分子图形工具。它擅长蛋白质、小分子、密度、表面和轨迹的3D可视化。它还包括分子编辑、射线追踪和动画。 PyMol的名字来源于“Py”表示该软件基于Python这…

第十二节:第三部分:集合框架:List系列集合:特点、方法、遍历方式、ArrayList集合的底层原理

List系列集合特点 List集合的特有方法 List集合支持的遍历方式 ArrayList集合的底层原理 ArrayList集合适合的应用场景 代码&#xff1a;List系列集合遍历方式 package com.itheima.day19_Collection_List;import java.util.ArrayList; import java.util.Iterator; import jav…

ZC-OFDM雷达通信一体化减小PAPR——SC-FDMA技术

文章目录 前言一、SC-FDMA 技术1、简介2、原理 二、MATLAB 仿真1、核心代码2、仿真结果 三、资源自取 前言 在 OFDM 雷达通信一体化系统中&#xff0c;信号的传输由多个子载波协同完成&#xff0c;多个载波信号相互叠加形成最终的发射信号。此叠加过程可能导致信号峰值显著高于…

【算法】贪心算法

一、贪心算法基本思想 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从 整体最优考虑&#xff0c;它所作出的选择只是在某种意义上的局部最优选择。 我们希望贪心算法得到的最终结果也是整体最优的。虽然贪心算法不 能对所有问题都得到整体最优解&#xff08;O…

通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式

一、项目背景&#xff1a;零基础挑战全栈智能家居系统 目标&#xff1a;开发具备设备控制、环境感知、用户习惯学习的智能家居控制中枢&#xff08;PythonFlaskMQTTReact&#xff09; 挑战点&#xff1a; 需集成硬件通信(MQTT)、Web服务(Flask)、前端交互(React) 调用天气AP…

C 语言开发中常见的开发环境

目录 1.Dev-C 2.Visual Studio Code 3.虚拟机 Linux 环境 4.嵌入式 MCU 专用开发环境 1.Dev-C 使用集成的 C/C 开发环境&#xff08;注&#xff1a;较老旧方案&#xff0c;适合基础学习&#xff09; 2.Visual Studio Code 结合 C/C 扩展 GCC/MinGW 编译器&#xff0c;配置…

关于用Cloudflare的Zero Trust实现绕过备案访问国内站点说明

cloudflare 是一个可免费的CDN&#xff0c;CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;加速国内网站&#xff0c;通常是已备案的。Zero Trust类似FRP&#xff0c;可以将请求转发到目标服务器。在使用Zero Trust绕过备案访问国内网站需要&…

火语言UI组件--播放器

【组件功能】&#xff1a;引用网络播放地址的视频播放器。 样式预览 设置 基础设置 属性名称属性释义输入值类型网络资源地址(url)播放视频的网络地址字符串类型音量(volume)播放视频的音量&#xff08;参考值&#xff1a;0 ~ 1)浮点型(Float)自动播放(autoplay)视频是否自动…

Linux基本指令

文章目录 1.ls指令1.1 ls -l指令1.2 ls-a指令1.2.1文件的类型1.2.2隐藏文件1.2.3[.]\[..]的含义 1.3 ls -d指令1.4 ls-F指令1.5ls指令子功能大全 2.pwd指令2.1路径分割符2.2/根目录 3.mkdir指令3.1 mkdir-p3.2mkdir常用功能 4.cd指令4.1多叉树概念4.2绝对/相对路径4.2.1绝对路径…