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

快速解决Android中的selinux权限问题关于selinux的详细资料,请查阅http://blog.csdn.net/innost/article/details/19299937在Android开发的过程中,遇到关于selinux相关的东西,当时还一下子看不懂,现在好像有点眉目了。比如,内核打印这个提示type=1400audit(32.939:25):avc:denied{open}forpid=2…

大家好,又见面了,我是你们的朋友全栈君。

关于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后才能生效)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • leetcode-124. 二叉树中的最大路径和(树形dp)

    leetcode-124. 二叉树中的最大路径和(树形dp)原题链接路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,null,1

    2022年8月8日
    4
  • 第一范式、第二范式和第三范式「建议收藏」

    第一范式、第二范式和第三范式「建议收藏」数据库的范式概念:设计数据库是,需要遵循的一些规范,要遵循后边的范式要求,必须遵循前边的所有范式要求设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈梯次规范,越高的范式数据库冗余越小目前关系型数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式、第四范式(4NF)、第五范式(5NF)。…

    2022年5月23日
    42
  • linux install font

    linux install font

    2021年4月23日
    174
  • 芭比Q了,腰间盘给整突出了「建议收藏」

    在2022年除了腰间盘外,其他的各个方面都可以越来越突出!

    2022年3月1日
    151
  • java线程优先级_java线程优先级有几级

    java线程优先级_java线程优先级有几级1.yield方法yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间。当放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片。2.线程的优先级在操作系统中,线程可以划分优先级,优先级较高的线程得到的CPU资源越多,也就是CPU优先执行优先级较高的线程对象中的任务。在Java中,线程的优先级分为1~10这10个等级,如果小于1或大于10,则JDK抛出异常thrownewIllegalArgumentException()。JDK中使用3个

    2022年10月15日
    0
  • 死链检测工具Xenu的操作及使用方法

    死链检测工具Xenu的操作及使用方法在网站SEO优化中,免不了经常检测网站的死链(404页面),使用死链检测工具可以起到事半功倍的效果,个人比较喜欢使用死链检测工具Xenu这款工具,具有界面简洁、操作方便等特性。死链检测工具Xenu的操作及使用方法1、下载Xenu软件并且打开Xenu程序,启动程序.exe文件名称为Xenu或者死链接检查,不同的压缩包解压出来不一致,以自己文件名称为准。双击“死链接检查”。2、点击导航栏中的“…

    2022年7月23日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号