本文转载自:http://blog.csdn.net/mike8825/article/details/49428417

版权声明:本文为博主原创文章,未经博主允许不得转载。

关于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

当然,这种信息有时太长了,以致于在minicom中出现了信息丢失的情况,可按参考http://blog.csdn.net/mike8825/article/details/49422727里的方法解决。

我们可以遵循这个方法,从头开始寻找关键对象,然后调整一下顺序,生成一条语句,最后将该语句填写到.te文件(external/sepolicy/*.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类型的块设备文件。

 

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

neverallow用来检查安全策略文件中是否有违反该项规则的allow语句

如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)

当然,测试的时候也可以在cmdline中加入androidboot.selinux=disabled来关闭selinux

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

  1. static void selinux_initialize(void)
  2. {
  3. if (selinux_is_disabled()) {
  4. return;
  5. }
  6. INFO("loading selinux policy\n");
  7. if (selinux_android_load_policy() < 0) {
  8. ERROR("SELinux: Failed to load policy; rebooting into recovery mode\n");
  9. android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
  10. while (1) { pause(); }  // never reached
  11. }
  12. selinux_init_all_handles();
  13. bool is_enforcing = selinux_is_enforcing();
  14. INFO("SELinux: security_setenforce(%d)\n", is_enforcing);
  15. security_setenforce(is_enforcing);
  16. }

修改is_enforcing的值(0或者1)。

快速解决Android中的selinux权限问题【转】的更多相关文章

  1. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

  2. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题

    解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题http ...

  3. 如何快速解决myeclipse中导入jquery文件的报错。

    如何快速解决myeclipse中导入jquery文件的报错. 解决: 选中错误的文件, 点击右键, 选中myeclipse,点击Exclude From Validation.

  4. 如何快速排查解决Android中的内存泄露问题

    概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ...

  5. Android 系统添加SELinux权限

    本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476 CPU:RK3288 系统:Android 5.1 SEL ...

  6. 缓存AsimpleCache -- 解决Android中Sharedpreferences无法存储List数据/ASimpleCache

    Sharedpreferences想必大家在项目中都经常会用到,但是如果需要在本地需要存储比较多的数据,存储一个集合的时,发现Sharedpreferences并不 是那么好使了. 分析 如果需要在本 ...

  7. 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题

    通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...

  8. 解决Android中多次点击启动多个相同界面的问题

    在Android开发过程中我们经常会碰到这样的问题,当用户点击一个View启动一个新的Activity的时候,如果快速地多次点击就会启动多个相同的界面.虽然说很少会有用户这么玩自己的手机,但是一旦出现 ...

  9. Android中的文件权限操作

    默认本工程创建的文件本工程对其有读写权限. 我们可以通过context.openFileOutput("文件名", 模式): 我们可以创建私有, 共有, 只读, 只写文件, 默认的 ...

随机推荐

  1. (39)C#Ping类

    一.Ping类 引用命名空间 using System.Net.NetworkInformation 控制台版 using System; using System.Collections.Gener ...

  2. Socks5代理Socks5 Proxy

    Socks5代理Socks5 Proxy   Socks5代理是基于Socks协议的一种代理模式.其中,5表示该协议的版本号.它可以让局域网的计算机通过socks5代理服务器,访问外网的内容.由于它工 ...

  3. Wannafly挑战赛16

    E(pbds) 题意: 1<=m,n<=5e5 分析: 首先指向关系形成了一个基环外向树森林 实际上我们可以完全不用真正的去移动每个球,而只需要在计数的时候考虑考虑就行了 对于树上的情况, ...

  4. Java集合——Collections工具类

    Java集合——Collections工具类 摘要:本文主要学习了Collections工具类的常用方法. 概述 Collections工具类主要用来操作集合类,比如List和Set. 常用操作 排序 ...

  5. IE使用多彩文档上传数据库报错

    使用多彩文档,用IE浏览器提交表单,双引号里面包含单引号,导致数据库插入不了,而用chrome浏览器不会报错,自动过滤单引号, 解决:content.replace("'", &q ...

  6. idea的快捷键和操作

    IntelliJ Idea 常用快捷键列表   修改方法如下: 点击 文件菜单(File) –> 点击 设置(Settings… Ctrl+Alt+S), –> 打开设置对话框. 在左侧的 ...

  7. 4.【nuxt起步】-具体练习一个h5实例

    目标地址:https://www.vyuan8.com/vyuan/plugin.php?id=vyuan_fangchan&module=fangchan&pid=10079& ...

  8. 利用Thinkphp 5缓存漏洞实现前台Getshell

    0×00 背景 网站为了实现加速访问,会将用户访问过的页面存入缓存来减小数据库查询的开销.而Thinkphp5框架的缓存漏洞使得在缓存中注入代码成为可能.(漏洞详情见参考资料) 本文将会详细讲解: 1 ...

  9. 一天时间用OpenFire打造自己的IM聊天工具

    Openfire采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议.Openfire安装和使用都非常简单,并利用Web进行管理.单台服务器可支持上万并发用户. 好友界面 ...

  10. Office HPDeskjetD2468 打印机电源灯闪烁不停,打印机不工作怎么办

    怎么处理HP DeskjetD2468 打印机电源灯闪烁不停,打印机不工作? 最佳答案 一般电源灯闪烁时因为你的打印喷头上面的盖子没有盖好,你看看.....盖好之后关机再开 谢谢!