快速解决Android中的selinux权限问题

2023-11-12

关于selinux的详细资料,请查阅http://blog.csdn.net/innost/article/details/19299937

在Android开发的过程中,遇到关于selinux相关的东西,当时还一下子看不懂,现在好像有点眉目了。

 

比如,内核打印这个提示

type=1400 audit(32.939:25): avc: denied { open } for pid=2592 comm="chmod" path="/dev/block/mmcblk0p25" dev="tmpfs" ino=6494 scontext=u:r:init_shell:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=1

 

我们可以遵循这个方法,从头开始寻找关键对象,然后调整一下顺序,生成一条语句,最后将该语句填写到.te文件中即可。

denied { open }             u:r:init_shell:s0            u:object_r:block_device:s0       tclass=blk_file                  

             A                               B                                              C                                       D
 
             B                               C                                              D                                       A

 

allow init_shell  block_device:blk_file open;

 

这条语句表示允许init_shell域中的block_device进程打开block_device类型的块设备文件。

或者直接使用工具生成external/selinux/prebuilts/bin/audit2allow

有时候会遇到编译该规则失败,这也许就是neverallow语句做怪了。

neverallow用来检查安全策略文件中是否有违反该项规则的allow语句(不可修改newerallow的定义)

 

如external/sepolicy/netd.te文件中,语句

neverallow netd dev_type:blk_file { read write };

表示永远不允许netd域中的进程读写dev_type类型的块设备文件,这时只需屏蔽该语句即可。

 

当然,在调试阶段,可在终端上运行如下命令获取SELinux的状态和临时关闭SELinux

setenforce 0                  ##设置SELinux 成为permissive模式(SELinux开启,但对违反selinux规则的行为只记录,不会阻止)

setenforce 1                  ##设置SELinux 成为enforcing模式 (SELinux开启)

getenforce                     ##获取SELinux状态(permissive,enforcing,disabled)

 

当然,如果要验证某些selinux问题,可以在cmdline中加入androidboot.selinux=0来关闭selinux

或者到Android源码的根目录下,直接修改system/core/init/init.c文件。

static void selinux_initialize(void)
{
    if (selinux_is_disabled()) {
        return;
    }

    INFO("loading selinux policy\n");
    if (selinux_android_load_policy() < 0) {
        ERROR("SELinux: Failed to load policy; rebooting into recovery mode\n");
        android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
        while (1) { pause(); }  // never reached
    }

    selinux_init_all_handles();
    bool is_enforcing = selinux_is_enforcing();
    INFO("SELinux: security_setenforce(%d)\n", is_enforcing);
    security_setenforce(is_enforcing);
}

修改is_enforcing的值为0。

当然,最好的修改方法可参考http://blog.csdn.net/u013983194/article/details/50462694

基本思路就是:默认A不许对B和C干什么,但没定义A对D的行为,那可以建一个D的对象,让A对D为所欲为。

修改后,然后编译mmm system/sepolicy -j30,会将devices下的selinux文件包含进去,生成的文件在system/etc/selinux/或vendor/etc/selinux/下,然后用grep进行字符串进行检索,确保修改成功,最后把相应的文件push到机器上验证(高版本的Android手机需要解锁后,push后才能生效)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

快速解决Android中的selinux权限问题 的相关文章

随机推荐

  • IOS xcode使用自带模板Tab bar Controller创建主页

    前面写过一篇类似的android版本 是使用的Bottom Navigation Activity结合Fragment创建APP的主页 IOS端的更简单 直接使用Tab bar Controller就可以了 一 创建Tab bar Cont
  • 技术至简-1:信源编码VS信道编码

    信源编码 用最精炼最简洁的语言文字表达最复杂的含义 目的是节省 纸张 信道编码 用啰嗦冗余的语言文字 注解表达简单的信息 目的是确保信息万无一失
  • Android databinding的接入使用与详解(一)

    一 介绍 DataBinding 是Google Android组件框架 管理view和data之间进行绑定 DataBinding主要管理数个布局文件 这样我们就不用去实例化layout的view 直接通过DataBindingUitl来
  • 软件测试须知基于PostMan的接口自动化测试

    临近年底 公司任务也不是很多 趁这个机会老大让我研究了一下PostMan的脚本自动化测试 作为一个前端开发 说实话 对于PostMan的操作 仅仅限于新建请求 gt 填写url地址和参数 gt send发送 然后看看返回值而已 事实上 Po
  • Python读取CSV文件,数值精度丢失

    Excel保存为csv以后 大数值的列 会把转换为科学计数法 而且后边几位都会被转为0 搞了很多方法 最后直接安装 openpyxl 组件 和 pandas 读取Excel文件就行了 data pd read excel C work 20
  • Search:Vscode 如何自定义Python代码高亮

    参考 白月黑羽的python教程网站 不太习惯Dark主题 然而又没有找到合适的Light Theme IDLE Shell的高亮倒是不错 可是VScode 的插件里没搜到 上网搜索 感谢B站up白月黑羽的分享 最终使用 Atom One
  • Unity3d FPS游戏之武器切换

    U3D武器系统切枪 多种武器切换教程 多种武器切换教程 我们要通过鼠标来实现切枪效果 我们要有几种思路 1 通过值来索引对应武器数组下标的值 然后生成 在切换武器的时候 先销毁当前的武器 在生成新武器 2 直接先全部生成 状态全部不激活 通
  • 144项大神级ppt制作技术

    1 两幅图片同时动作 PowerPoint的动画效果比较多 但图片只能一幅一幅地动作 如果你有两幅图片要一左一右或一上一下地向中间同时动作 可就麻烦了 其实办法还是有的 先安置好两幅图片的位置 选中它们 将之组合起来 成为 一张图片 接下来
  • ubuntu虚拟机变成只读文件系统的解决方法

    因非正常关机可能导致文件系统变为只读 1 先在windows系统里给硬盘 或虚拟机文件夹 去掉只读权限 2 可选项 搜索框输入cmd 以管理员身份运行 依次执行下面的命令 diskpart list disk 列出磁盘 select dis
  • python没基础能自学吗-需要自学python吗?大概多久能学会?

    以下内容针对有编程经历的同学 没有编程经历的建议跟着视频学习 我这准备了一套基础的python视频资料 需要的同学可以私信我 对于python这块有任何不懂的问题可以随时来问我 我对于学习方法 系统学习规划 提高学习效率这些知道一点 希望可
  • 【华为OD】

    华为OD试题注意事项 使用合适的编程语言 在华为OD机试中多数情况下使用C 或Java 按照题目要求进行编码 仔细阅读题目描述并理解要求 在编码前可以进行伪代码编写或画流程图有助于理解和排除逻辑错误 注意代码的规范性 注重代码的可读性和可维
  • nrm ls *(星号)不见了,修改了cls文件也没有用

    问题描述 在使用nrm切换源的时候 发现执行nrm ls命令后 原本的 号不见了 这样很难一眼看出当前使用的npm源 npm https registry npmjs org yarn https registry yarnpkg com
  • 电子元器件符号+实物图+命名规则(太全了,绝对收藏)

    电子电路中常用的器件包括 电阻器 含电位器 电容器 电感器 变压器 二极管 三极管 光电器件 电声器件 显示器件 晶闸管 可控硅 场效应晶体管 IGBT MOSFET 继电器与干簧管 开关 保险丝 晶振 连接器 各种传感器等 下面一起来看看
  • 兼莱宝分享:适合上班族空闲时间做的三种靠谱副业?

    只讲干货 不来虚的 作为一个有着4年自由写作经验的人 做过的兼职非常多 什么给人家做海报 写商业文案 做民宿体验师等等 都有尝试过 每一份工作的收入都是不一样的 今天只分享3种靠谱的副业 都是我自己做过并且有收益的副业 一 自媒体写作 很多
  • 每日学习:Idea和Eclipse中的一些常用快捷键

    1 删除光标所在行代码 idea快捷键 Ctrl X eclipse快捷键 Ctrl D 2 复制光标所在行代码 或者鼠标选中的代码 idea快捷键 Ctrl D eclipse快捷键 Ctrl Alt 上下键 3 切换代码大小写 idea
  • Nacos 中下线服务时报错:The Raft Group [naming_instance_metadata] did not find the Leader node;解决

    问题描述 因为某些特殊原因需要把nacos迁移到另一个版本的nacos 我迁的是nacos2 0 2版本 迁移完成后 Nacos注册中心有一个微服务有多台实例的时候 点击一个实例下线操作 报错 caused errCode 500 errM
  • easyExcel文件上传与下载

    目录 1 导入POM依赖 2 模板文件 3 实体类 4 前端页面 5 模板文件上传 Controller 6 文件下载 Controller 7 导出效果 1 导入POM依赖
  • linux常用命令总结

    find查找命令 find 位置 name 搜索的相关内容 eg find name aaa 查看当前位置以aaa开头的文件 查找文件得内容 grep r 关键字 路径 例如 grep r test data reports grep 查找
  • 如果代码已关联git仓库,但是想将代码提交到新的仓库,应该如何做?

    如果你已经将代码关联到了一个 Git 仓库 但是希望将代码提交到另一个远程仓库 可以按照以下步骤操作 打开命令行终端并导航到你的本地代码仓库 确保你当前在正确的分支上 你可以通过运行 git branch 命令来查看当前所在分支 如果需要切
  • 快速解决Android中的selinux权限问题

    关于selinux的详细资料 请查阅http blog csdn net innost article details 19299937 在Android开发的过程中 遇到关于selinux相关的东西 当时还一下子看不懂 现在好像有点眉目了