android7.1增加一个开机自启动的bin应用遇到的权限问题
android7.1增加一个开机自启动的bin应用遇到的权限问题
1. 增加开机自启动的bin应用
1.1 增加的源代码
新建external\study,编译生成study,编译方式有两种
(1) mmm external/study
(2) make systemimage,在 device/qcom/common/base.mk下增加LIBCAMERA += study
1.2 增加开机自启动study
device/qcom/msm8937_64/init.target.rc的
on boot
…
service study /system/bin/study
class main
user root
oneshot
第1个study是service名称,第2个study是可执行应用名称。
1.3 增加study的权限
(1) device/qcom/sepolicy/common/file_contexts下增加study
# System files
…
stem/bin/study u:object_r: study_exec:s0
file_contexts文件保存系统中所有文件的安全上下文定义,每行前半部分是文件的路径,后面是它的安全上下文的定义(study_exec)。
安全上下文的格式:USER:ROLE:TYPE[LEVEL],在安全上下文规则中最主要的定义是type,这里是study_exec。TYPE是定义主体和客体所属的类型,对于进程而言,它的类型也称为domian。
(2) 在device/qcom/sepolicy/common/或是其他sepolicy下增加study.te文件。
Te文件属于类型强制规则文件(TypeEnforcement),它主要由类型定义和规则定义两部分组成
#定义了study和study_exec两种类型,study用在进程的安全上下文中,study_exec用在文件的安全上下文中。属性domain表示域,属性是android预先在system\sepolicy\attributes中定义好,当然我们也可以定义,比如在device\qcom\sepolicy\common\attributes中。
#无论是主题还是客体的类型定义,都是通过type语句来完成,通常主体的type具有domian属性,因此,我们也把主体的type称为domain,将domain设置为study的属性,表明zygote是用来描述进程的安全上下文的。
type study, domain;
#表明类型study_exec具有属性exec_type和file_type,即它是用来描述文件的安全上下文的
type study_exec, exec_type, file_type;
init_daemon_domain(study)
allow study study:capability dac_override;
allow study rootfs:lnk_file { read getattr};
allow study system_data_file:dir {opengetattr read write add_name};
allow study system_data_file:file {opengetattr create read write};
allow study shell_exec:file {read openexecute execute_no_trans rx_file_perms};
allow study toolbox_exec:file {getattrexecute read open execute_no_trans};
这些内容是根据avc denied的log增加的。
1) init_daemon_domain(study)
程执行一个type为zygote_exec的文件时,将该子进程的domain设置为zygote,而不是继承父进程的domain。并且给与zygote这个domain,所有定义在tmpfs_domain宏中的权限。
# init_daemon_domain(domain)
# Set up a transition from init to thedaemon domain
# upon executing its binary.
define(`init_daemon_domain', `
domain_auto_trans(init, $1_exec, $1)
tmpfs_domain($1)
')
init_daemon_domain(study)是一个宏,声明当一个domain为init的进程创建一个子进程执行一个type为study_exec的文件时,将该子进程的domain设置为study,而不是继承父进程的domain。并且给与study这个domain,所有定义在tmpfs_domain宏中的权限。
2) allow语句
比如allow study system_data_file:file {opengetattr create read write};
rule_name source_type target_type : classperm_set
source_type:通常是某种属性为domain的类型(type),代表主体。
Target_type(目标类型):允许访问的客体的类型,目标类型可以同时指定多个,
Class(客体类别):允许访问的客户的目标类型可能会涵盖比较广的范围,客体类别可以对客体目标类型进行限制和明确化,例如这里目标类型是system_data_file可以代表文件(file)、目录(dir)及链接(lnk_file),通过file对它进行了限制,因此,在这条规则中只代表文件。
增加的内容需要编译生成新的boot.img和生成study,其中增加的study.te文件在make bootimage编译的时候生成在out\target\product\msm8937_64\root\sepolicy中,而file_contexts文件汇总生成为out\target\product\msm8937_64\root\file_contexts.bin,file_contexts.bin文件,file_contexts.bin 和 file_contexts可互转,见链接:
https://blog.cofface.com/archives/2255.html
sepolicy可用二进制工具bless查找里面的内容。
2. adb方式更新boot.img和study---OK
用fastboot烧录boot.img和adb push study到/system/bin下验证正常。
通过ls -z study方式得到结果:
u:object_r:study_exec:s0system/bin/study
3. 升级包update.zip方式更新boot.img和study---权限问题
更新后提示init: Service study does not have aSELinux domain defined.
通过ls -z study方式得到结果:
u:object_r:system_file:s0 system/bin/study
可见用adb的方式study的类型是study_exec,升级包的方式是system_file,为什么是system_file呢?见文件system\sepolicy\file.te下面的内容
# Default type for anything under /system.
type system_file, file_type;
为了解决init: Service study does not have aSELinux domain defined.问题,需要在升级包的META-INF\com\google\android\updater-script文件增加下面的内容:
set_metadata("/system/bin/study","uid", 0, "gid", 2000, "mode", 0755,"capabilities", 0x0, "selabel", "u:object_r:study_exec:s0");
android7.1增加一个开机自启动的bin应用遇到的权限问题相关推荐
- android 实现一个开机自启动的service
1.概述 本文记录了如何在android11系统中创建一个native服务,实现简单的文件复制功能,并实现开机启动,通过aidl,应用层能够使用该服务.首先你得有一套android源码,并且编译过. ...
- 在Ubuntu上编写一个开机自启动的Python脚本
编写一个shell脚本文件,例如python_auto.sh,文件内容: 2.编写start.py文件,里面执行你需要服务器开启执行的操作 3.在 /etc/profile 这个文件中,添加shel ...
- linux开机自启动tty设备,在 tty 里添加一个开机自启动的任务管理器
每当感觉到系统卡的时候,最好的方法无外乎进入 tty,登入,打开一个 top 监视.可是每次到了需要的时候才去开,打开的效率自然不敢恭维.于是便想,每次开机的时候,记起来就跑到 tty 下面去先开起来 ...
- Ubuntu增加一个用户并给普通用户赋予root权限的方法
1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #adduser tommy //添加一个名为tommy的用户 #passwd tommy //修改密码 Changing pa ...
- Ubuntu开机自启动程序的方法
文章目录 Ubuntu开机自启动程序的方法 目标效果 方案1:修改rc.local 测试结果 方案2:单独增加一个开机启动的脚本 错误1 错误2 实测结果 refs 方案3:利用官方快捷方式启动 Ub ...
- 简单记录一下开机自启动软件失效,无法自启的问题
原因是我写了一个开机自启动的脚本,作用是清除我的IE代理设置,之前都一切正常,但是后面加了一句之后就导致我自启软件全部失效了,脚本: @echo off echo 设置 ProxyEnable 为禁用 ...
- 向Linux增加一个系统调用或内核模块
向Linux增加一个系统调用或内核模块 配置环境 获取root权限 sudo su 更新系统 sudo apt-get update 安装相关编译程序包 sudo apt-get install li ...
- ubuntu下以管理员权限开机自启动自己的程序
实现目的:让自己编写的程序在ubuntu下开机自启动,并且要以管理员权限启动 实现步骤: 1.打开"Startup Applications" 程序,如下图: 或者在终端输入命令: ...
- 全志A40I Android7.1系统开机自启动
全志A40I Android7.1系统开机自启动,也适用于其他Android系统.Android系统的自启动不同于Linux系统,linux直接在内核init.rc中修改,应用层不用修改,而Andro ...
最新文章
- 头插法建立单链表学习总结
- [html] canvas透明度是0.6的矩形和透明度是0.2的矩形叠加到一起,透明度是多少
- Python-进程相关概念
- Bash中命令连接符的用法——一次执行多个命令-转
- 使用keytool 生成证书
- linux解析器错误权限不够,实例解析Linux下目录的权限
- 《JavaScript语言精粹》笔记(内附《JavaScript语言精粹》百度云下载链接)
- ABAP 如何解析 JSON 数据试读版
- 【小教程】完全卸载Adobe Creative Cloud以及删除资源管理器左侧Creative Cloud Files导航栏的最快方法
- 手机平板如何查看IDEA中运行的Tomcat的web项目
- STM32 Cubemax(十五) —— 串级PID以控制电机角度值为例
- 三阶魔方还原步骤图_三阶魔方公式图解、教程
- Fortinet:网络安全越来越勤快,可甲方却应该越来越「懒」
- day05 Servlet组件(上)
- (附源码)springboot企业合同管理系统 毕业设计 161456
- 计算机大赛搞笑队名,电子设计大赛队名
- 麻将番型计算(二人麻将)
- 计算机语言词汇量,汉语作为第二语言的词汇量测量工具研究
- 维基解密再爆料:CIA能操纵浏览器,监视PPT
- 学习Linux内核必读的五本书
热门文章
- 015_JavaMail
- 037_CSS媒介类型
- 阿德莱德计算机专业排名,阿德莱德大学专业排名第几?2019年榜单揭晓!
- 深交所互动平台_怡达股份股价涨跌幅偏离大盘,深交所:啥原因?
- cf不能全屏win7的解决方法_win7电脑输入法不能打字的解决方法
- python调用所有函数_python打印所有函数调用以了解脚本
- 四级重点高频词汇表_四级为什么自己估分和真实成绩不一样……?
- 数据结构——树、二叉树、森林、哈夫曼树、字符串模式匹配
- mysql 表名不加单引号_当表名“ match”没有用单引号引起来时,MySQL引发错误?...
- php7与php5的区别,PHP7和PHP5区别