Android 系统添加SELinux权限
本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=11185476
CPU:RK3288
系统:Android 5.1
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
通过虚拟文件系统 proc 来读写 gpio 的方法非常受欢迎,不仅因为其省去了 hal 层、 jni 层的代码,而且可以直接通过 adb shell 来读写 gpio。
在 user 版本,虽然驱动代码中已经将节点权限设置为 777 或者 666,但是在 adb shell 中写 gpio 时会报出权限不足的问题。
最快的解决办法是将系统编译成 userdebug 版本或者 eng 版本,也可以对系统 root。
下面是编译成 user 版本的解决方法,前提是驱动已经OK。
cust_gpios 是驱动中通过 proc_mkdir 创建的目录,relay 是通过 proc_create 创建的节点,对应一个方向为输出 gpio
1、在 adb 中读,没有问题,但是写 gpio 会报出权限不足
shell@rk3288:/proc/cust_gpios $ cat relay
cat relay shell@rk3288:/proc/cust_gpios $ echo > relay
echo > relay
/system/bin/sh: can't create relay: Permission denied
kenel 中打印出的错误信息如下
type=1400 audit(1358758415.820:7): avc: denied { write } for pid=1229 comm="sh" name="relay" dev="proc" ino=4026533065 scontext=u:r:shell:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=0
解释:
write:表示没有 write 权限
shell:shell 中缺少权限,文件名与此相同,xxx.te
proc:proc 文件系统缺少权限
file:file 类型的文件
2、添加 shell 权限,scontext 对应的是 shell ,所以需要在 shell.te 最后面中添加
path:\device\rockchip\common\sepolicy\shell.te
allow shell proc:file write;
3、添加后编译会报错如下,这是因为添加了不允许的规则
libsepol.report_failure: neverallow on line 344 of external/sepolicy/app.te (or line 4313 of policy.conf) violated by allow shell proc:file { write };
需要在 app.te 中的 344 行中不允许的规则中删除添加的权限,用大括号括起来
path:\external\sepolicy\app.te
neverallow {appdomain -shell}
proc:dir_file_class_set write;
此时可以在 adb 来通过 proc 虚拟文件系统正常读写 gpio
4、操作 gpio 最终要由上层 apk 来读写,同样写 gpio 时,kernel 和 logcat 都会报出权限不足,解决方法与上面类似
type=1400 audit(1358758857.090:8): avc: denied { write } for pid=1208 comm="ron.gpiocontorl" name="relay" dev="proc" ino=4026533065 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:proc:s0 tclass=file permissive=0
添加权限
path:device\rockchip\common\sepolicy\untrusted_app.te
allow untrusted_app proc:file write;
添加后编译报错
libsepol.report_failure: neverallow on line 344 of external/sepolicy/app.te (or line 4313 of policy.conf) violated by allow untrusted_app proc:file { write };
删除不允许的权限
path:\external\sepolicy\app.te
neverallow {appdomain -shell -untrusted_app}
proc:dir_file_class_set write;
此时 adb 和 apk 中都能正常读写 gpio。
下面是 RK3288 Android 5.1 添加权限的完整补丁
diff --git a/device/rockchip/common/sepolicy/shell.te b/device/rockchip/common/sepolicy/shell.te
index be7a221..f382240
--- a/device/rockchip/common/sepolicy/shell.te
+++ b/device/rockchip/common/sepolicy/shell.te
@@ -, +, @@ allow shell toolbox_exec:file { read getattr open execute execute_no_trans };
allow shell logcat_exec:file { read getattr open execute execute_no_trans };
allow shell serial_device:chr_file rw_file_perms;
allow shell proc_cpuinfo:file mounton;
+allow shell proc:file write; diff --git a/device/rockchip/common/sepolicy/untrusted_app.te b/device/rockchip/common/sepolicy/untrusted_app.te
index 8c0f740..69cfc0d
--- a/device/rockchip/common/sepolicy/untrusted_app.te
+++ b/device/rockchip/common/sepolicy/untrusted_app.te
@@ -, +, @@ allow untrusted_app kernel:system { module_request };
allow untrusted_app binfmt_misc:dir { search };
allow untrusted_app binfmt_misc:file { read open };
allow untrusted_app video_device:chr_file { read write open ioctl };
+allow untrusted_app proc:file write; diff --git a/external/sepolicy/app.te b/external/sepolicy/app.te
index ca08d74..
--- a/external/sepolicy/app.te
+++ b/external/sepolicy/app.te
@@ -, +, @@ neverallow { appdomain -shell } efs_file:dir_file_class_set read;
# Write to various pseudo file systems.
neverallow { appdomain -bluetooth -nfc }
sysfs:dir_file_class_set write;
-neverallow appdomain
+neverallow {appdomain -shell -untrusted_app}
proc:dir_file_class_set write; # Access to syslog() or /proc/kmsg.
Android 系统添加SELinux权限的更多相关文章
- android系统添加预置APP(so库自动释放)
将APK直接放入系统目录中,会导致APK找不到so文件.正常情况下的安装是使用PackageManager,它会将so文件拷贝到系统读取的so目录(system/lib或system/lib64)下, ...
- Android系统常用的权限
开机自动允许 android.permission.RECEIVE_BOOT_COMPLETED,允许程序开机自动运行. 电量统计 android.permission.BATTERY_STATS ...
- Android系统添加key和keypad
平台:MTK 一.添加一个按键 1.在DCT tool keypad list 文件增加新按键的选项alps\mediatek\source\dct\Keypad_YuSu.cmp中添加新键,如SMS ...
- Android系统的常用权限
1.ACCES_NETWORK_STATE 允许应用程序获取网络状态信息的权限 2.ACCESS_WIFI_STATE ...
- Android 系统常用的权限
权限 说明 ACCESS_NETWORK_STATE 允许应用程序获取网络状态信息的权限 ACCESS_WIFI_STATE 允许应用程序获取 Wi-Fi 网络状态的权限 BATTERY_STATE ...
- 快速解决Android中的selinux权限问题【转】
本文转载自:http://blog.csdn.net/mike8825/article/details/49428417 版权声明:本文为博主原创文章,未经博主允许不得转载. 关于selinux的详细 ...
- Ubuntu系统添加用户权限
一.首先创建一个新用户: sudo adduser hadoop 其次设置密码: sudo passwd hadoop 如果无法使用root密码,请输入如下命令: sudo passwd root 二 ...
- Android——系统权限
Android是一个特权分隔的操作系统,每一个应用程序运行在不同的系统身份中(Linux的user ID和group ID).系统部分和不同的身份被隔离开来.因此,Linux隔离了应用程序(与其它程序 ...
- 第一章Android系统移植与驱动开发概述--读书笔记
以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构. ...
随机推荐
- Java 函数调用是传值还是传引用? 从字节码角度来看看!
原文地址:点击打开
- 基于FTP 的本地Yum服务器配置
服务器端 环境如下 Vmware14CentOS 7.6 192.168.20.81 server 192.168.20.81 client 1.配置yum源 mount /dev/cdrom /me ...
- mysql(单表查询,多表查询,MySQl创建用户和授权,可视化工具Navicat的使用)
单表查询 语法: 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT ...
- vi编辑器简介
vi编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界面,vi是效率很高的文本编辑器.尽管在Linux上也有很多图形界面的编辑器可用,但vi在系统和服务器管理中的功能 ...
- js、jquery实现列表模糊搜索功能
实现的搜索功能: 1. 可以匹配输入的字符串找出列表中匹配的项,列表框的高度跟随搜索出的列表项的多少改变 2. 可以点击某一项进行选中列表项 3. 可以按下上.下.回车键来控制列表项 4. 按下回车键 ...
- 使用超声波传感器HC-SR04检测障碍物
HC-SR04是一种常用的超声波传感器,能够探测2-300厘米范围内的障碍物. 传感器看起来像一个小PCB,前面有两个金属圆柱,背面有一个小电路. 在本文中,我们将提供一个简单的演示来使用HC-SR0 ...
- Luogu P1276 校门外的树(增强版)
Luogu P1276 校门外的树(增强版) 本来看着是道普及-,就不打算写博客了,结果因为出了3次错,调试了15min就还是决定写一下-- 本题坑点: 1.每个位置有三种情况:空穴,树苗,树(而不只 ...
- Spring Security 流程
首先创建4个类 流程大致如下: 1.容器启动 加载系统资源与权限列表(HashMap) MyInvocationSecurityMetadataSourceService中的loadResourceD ...
- C++11新特性之operator "" xxx(const char *, size_t n)
从C++11开始,我们可以使用以下形式通过常量字符串构造自定义类型, 比如: class Person { public: Person(const std::string& name): _ ...
- 赤池信息准则AIC,BIC
很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合.所以,模型选择问题在模型复杂度与模型 ...