微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > 权限(Permission denied)问题如何确认是Selinux约束引起?

权限(Permission denied)问题如何确认是Selinux约束引起?

时间:10-02 整理:3721RD 点击:
[Description]

android KK 4.4 版本后,如果发现进程无法访问某些文件,无法连接socket 等问题,并且发现errno 是
EPERM(Operation not permitted) 或者 EACCES (Permission denied), 如何确认此类问题是因为SElinux 约束引起?

[Keyword]

android, SELinux, Permission denied, 访问限制, 权限问题

[Solution]

在Android KK 4.4 版本后,Google 有正式有限制的启用SELinux, 来增强android 的安全保护。
SELinux 分成enforcing mode 和 permissive mode, enforcing mode 会强制性限制访问; 而permissve mode 只审查
权限, 但不限制, 即不会产生实质性影响.
KK 版本, Google 只有限制的启用SELinux, 即只有针对netd, installd, zygote, vold 以及它们直接fork 出的child
process 使用enforcing mode, 但不包括zygote fork的普通app.
L 版本后, Google 全面开启SELinux, 所有的process 都使enforcing mode, 影响面非常广.
另外为了限制user 版本root 权限,针对su 有做特别的处理,可以参考FAQ android KK 4.4 版本后,user 版本su 权
限严重被限制问题说明
目前所有的SELinux check 失败,在kernel log 或者android log(L版本后)中都有对应的"avc: denied" 或者 "avc:
denied"的LOG 与之对应。反过来,有此LOG,并非就会直接失败,还需要确认当时SELinux 的模式, 是enforcing mode
还是 permissve mode, 通常在LOG 上带有 permissive = 1 即是permissive mode, 否则permissve = 0 即是
enforcing mode.
如果问题容易复现,我们可以先将SELinux 模式调整到Permissive mode,然后再测试确认是否与SELinux 约束相关.
在ENG 版本中:
adb shell setenforce 0
如果设置成permissive mode 后问题依旧,说明还有其他的权限问题约束,否则就是SELinux 方面的问题。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top