快速解决Android中的selinux权限问题【转】
本文转载自: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文件。
- 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或者1)。
快速解决Android中的selinux权限问题【转】的更多相关文章
- android中获取root权限的方法以及原理(转)
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...
- 解决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 ...
- 如何快速解决myeclipse中导入jquery文件的报错。
如何快速解决myeclipse中导入jquery文件的报错. 解决: 选中错误的文件, 点击右键, 选中myeclipse,点击Exclude From Validation.
- 如何快速排查解决Android中的内存泄露问题
概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ...
- Android 系统添加SELinux权限
本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476 CPU:RK3288 系统:Android 5.1 SEL ...
- 缓存AsimpleCache -- 解决Android中Sharedpreferences无法存储List数据/ASimpleCache
Sharedpreferences想必大家在项目中都经常会用到,但是如果需要在本地需要存储比较多的数据,存储一个集合的时,发现Sharedpreferences并不 是那么好使了. 分析 如果需要在本 ...
- 解决Android中多次点击(快速点击多次 )启动多个相同界面的问题
通过以下代码可以解决这个问题. /** * 防止快速点击 * @param ev * @return */ @Override public boolean dispatchTouchEvent(Mo ...
- 解决Android中多次点击启动多个相同界面的问题
在Android开发过程中我们经常会碰到这样的问题,当用户点击一个View启动一个新的Activity的时候,如果快速地多次点击就会启动多个相同的界面.虽然说很少会有用户这么玩自己的手机,但是一旦出现 ...
- Android中的文件权限操作
默认本工程创建的文件本工程对其有读写权限. 我们可以通过context.openFileOutput("文件名", 模式): 我们可以创建私有, 共有, 只读, 只写文件, 默认的 ...
随机推荐
- Android 防护扫盲篇
一,已知防护策略 1.不可或缺的混淆 Java 是一种跨平台.解释型语言,Java 源代码编译成的class文件中有大量包含语义的变量名.方法名的信息,很容易被反编译为Java 源代码.为了防止这种现 ...
- 从源码解析 Spring JDBC 异常抽象
初入学习 JDBC 操作数据库,想必大家都写过下面的代码: 数据库为:H2 如果需要处理特定 SQL 异常,比如 SQL 语句错误,这个时候我们应该怎么办? 查看 SQLException 源码,我们 ...
- uibutton 使用settitle后如何修改其中文字对齐方式
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; btn.frame = CGRectMake(5, s ...
- MinGW在Windows环境下配合命令提示符运行C/C++
http://jingyan.baidu.com/article/4853e1e5787d6b1909f726f8.html 在电脑中配置MinGW环境. 具体参见我的另一篇分享经验——MinGW在W ...
- fast-cgi & php-fpm 等的理解
原文地址:https://segmentfault.com/q/1010000000256516 网上有的说,fastcgi是一个协议,php-fpm实现了这个协议: 有的说,php-fpm是fast ...
- Redis Sentinel 情况下bind地址设置
Redis Sentinel 情况下bind地址设置 1个master,2个slave,3个sentinel的情况下,注意bind地址的时候不要写0.0.0.0,会导致绑定多个地址, 然后sentin ...
- hibernate session缓存
Session 概述 Session 接口是 Hibernate 向应用程序提供的操纵数据库的最基本的接口, 它提供了基本的保存, 更新, 删除和载入 Java 对象的方法. Session 具有一个 ...
- 安装odoo 9实录
安装Ubuntu,省略 下载 odoo源码 使用 git 下载源码 mkdir /opt/openerp/server cd /opt/openerp/server git clone https:/ ...
- 浅谈MySQL外键
http://www.xiaoxiaozi.com/2009/07/12/1158/ 像MySQL这样的关系型数据库管理系统,它们的基础是在数据库的表之间创建关系的能力.通过方便地在不同表中建立记录到 ...
- FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块(转)
1.Nginx的FastDFS模块什么作用? 我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传.下载.删除等操作.同时通过 FastDFS的HTT ...