赞
踩
在没有root的前提下,system分区为只读,若要动态修改该分区下的文件,可以按照下面流程实现:
1.写执行脚本,这里以修改system/etc/hosts文件为例,在/device/mediatek/mt67xx目录下创建名为modifyhosts.sh的文件,文件内容如下:
- # 修改system分区为可读写
- mount -o remount,rw /system
-
- # 修改内容,可以执行拷贝、删除、写入等操作
- echo 127.0.0.1 localhost > /etc/hosts
-
- # 修改hosts文件权限
- chmod 644 /etc/hosts
-
- # 修改system分区为只读
- mount -o remount,ro /system
PRODUCT_COPY_FILES += $(LOCAL_PATH)/modifyhosts.sh:system/bin/modifyhosts.sh
- service remount-sys /system/bin/modifyhosts.sh
- # 这个服务不能通过启动一类服务来启动,只能单独以名字来启动
- disabled
- # 服务只运行一次,退出后不再重启
- oneshot
- # 将domain设置为modifyhosts的属性,表明modifyhosts是用来描述进程的安全上下文的
- type modifyhosts, domain;
- # 调试时先加上下面这一句,它会打印出所有需要申请的权限,调试完成后删除该语句。
- permissive modifyhosts;
- # 将exec_type和file_type设置为modifyhosts_exec的属性,表明modifyhosts_exec是用来描述可执行文件的安全上下文的
- type modifyhosts_exec, exec_type, file_type;
- init_daemon_domain(modifyhosts)
/system/bin/modifyhosts.sh u:object_r:modifyhosts_exec:s0
6.添加SELinux权限,由于不知道需要添加哪些权限,故按上面5个步骤操作完后,可以先编译版本刷机,之后在adb shell 下执行:
- setprop ctl.start remount-sys
- dmesg > /data/data/a.txt
log内容如下:
[ 659.805760] .(0)[269:logd.auditd]type=1400 audit(1481859095.080:77): avc: denied { remount } for pid=5080 comm="mount" scontext=u:r:modifyhosts:s0 tcontext=u:object_r:labeledfs:s0 tclass=filesystem permissive=1
- allow 主体的Type 客体的Type:操作 权限1;
- 或者:
- allow 主体的Type 客体的Type:操作 { 权限1 权限2 };
allow modifyhosts labeledfs:filesystem { remount };
- libsepol.report_failure: neverallow on line 284 of external/sepolicy/domain.te (or line 5613 of policy.conf) violated by allow modifyhosts labeledfs:filesystem { remount };
- libsepol.check_assertions: 1 neverallow failures occurred
- neverallow { domain -kernel -init -recovery -vold -zygote
- -modifyhosts # add by zhangyongfei
- } { fs_type -sdcard_type }:filesystem { mount remount relabelfrom relabelto };
- // remount-sys是在init.rc中自定义的服务名
- SystemProperties.set("ctl.start","remount-sys");
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。