jasmine1

https://www.douban.com/note/640791543/

0
阅读(1774)

1.android KK 4.4版本后,app使用root(su)权限受到严格限制说明
[Description]
android KK 4.4 版本后,不管是user 版本,还是eng 版本,app 执行su 后,还由很多权限受到限
制,比如无法抓kernel log, 执行dmesg, 提示:klogctl: Operation not permitted。无法
remount system image 等。
[Keyword]
KK, 4.4, app, su , root
[Solution]
Google 对root 权限是又爱又恨,同时也对app 进行更加严格的权限管控。
在android 4.4 上,zygote fork app 时,特意对所有fork 出来的子进程,进行了CAPBSET_DROP
动作,将Process 的root capabilities 进行了强行限制。 使得即使这些APK 徒有Root 权限,而
无真实的capabilites.
具体代码参考dalvik/vm/native/dalvik_system_Zygote.cpp 中的forkAndSpecializeCommon 函数
(这个贵司无法修改,因为我们释放时使用封装的Dalvik)
for (int i = 0; prctl(PR_CAPBSET_READ, i, 0, 0, 0) >= 0; i++) {
err = prctl(PR_CAPBSET_DROP, i, 0, 0, 0);
if (err < 0) {
if (errno == EINVAL) {
ALOGW("PR_CAPBSET_DROP %d failed: %s. "
"Please make sure your kernel is compiled with "
"file capabilities support enabled.",
i, strerror(errno));
} else {
ALOGE("PR_CAPBSET_DROP %d failed: %s.", i, strerror(errno));
dvmAbort();
}
}
}
这样使得即使后面使用su, 因为Capabilites 中的bounding set 受到明确的限制,使得子进程也无
法拿到完整的capabilities。对比android JB 4.2 的版本,以及android KK 4.4 的版本,你就会
看到:
4.2.2 版本:
root@MT6589_phone_720pv2:/ # cat proc/17569/status
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
4.4.2 版本:
root@mt6589_phone_720pv2:/ # cat proc/17569/status
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffe000000000
可以明显的看到,app 所有有效capabilities 的bounding 都被消除掉。故后续su 起来时
,Permitted/effective Capabilites 也被消除。
CapInh: 0000000000000000
CapPrm: ffffffe000000000
CapEff: ffffffe000000000
CapBnd: ffffffe000000000
因此app 执行su 时,其权限受到了严格的管控,比如无法逃脱DAC 权限管控。但因为依旧具有root
uid/gid, 所以在Framework 层的permission 限制上依旧畅通无阻。
反过来,如果其他非zygote 以及它的子进程fork 的process 执行su/root 则不受这个影响。
[相关FAQ]
FAQ11414: android KK 4.4 版本后,user 版本su 权限严重被限制问题说明



2.如何抓取android层的开机log[DESCRIPTION]
如何抓取android层的开机log。
[SOLUTION]
一.eng版本。
1. mtk驱动程序log工具抓取开机log:
(1).打开mtklog,清除掉之前log。
(2).勾选“start automatically”;启动mtklog工具,执行关机开机的操作。
将复现问题整个mtklog文件夹提供给我司。mobilelog中应该包含两个APLog_xx_xx文件夹,且
Normal开机APLog文件夹中包含 .boot类似文件,ipo开机有.ipo类似文件,关机闹钟开机有
.other文件。
注意:关于开机过程定屏问题请在定屏处保持30s。如果是normal开机,请抓取log前确认关闭IPO开机。

......