Android Nougat

时间:2016-07-26 12:38:19

标签: android filesystems file-permissions permission-denied android-7.0-nougat

自Android N开发人员预览版首次发布以来,在尝试列出根目录或其他系统目录时,我收到“权限被拒绝”错误。这些目录的权限似乎没有改变(据我所知)。

问题:

Android N中的哪些更改导致这些权限被拒绝?

如何复制:

在ADB shell中,运行以下命令:

run-as com.debuggable.packagename
ls /

这会在Android N上提供权限被拒绝的错误。

为什么要列出系统目录:

我注意到Android N上有几个文件管理器的这种行为。他们无法再列出根目录或其他系统文件。这也限制了shell中运行ps的输出。这些更改还导致此library停止在Android N上工作。

2 个答案:

答案 0 :(得分:10)

有两组更改减少了对/ proc的访问。

procfs文件系统现在使用hidepid = 2挂载,从而无法访问其他用户的/ proc / PID目录。这一变化在CopperheadOS中实施,然后在此基础上采用。有一组用于制作例外但未作为权限公开的组。它仅用于为基本系统中的某些进程创建例外。它可能被暴露为危险的'许可,这是我预期谷歌最终会做的,但他们认为用户不会理解它的含义。

https://android-review.googlesource.com/#/c/181345/

SELinux政策也变得更加严格。对于应用程序,根本没有对/ proc的基线访问权限,尽管这仅适用于/ proc / PID目录以外的文件。仍然可以访问一些文件,这些文件的标签不属于一般过程政策,但它大部分已经消失。这是渐进的,并且有许多相关的提交。其中一个重要的:

https://android-review.googlesource.com/#/c/105337/

这不仅消除了许多明显的信息,而且还关闭了一些更明显的安全漏洞,涉及侧面通道,允许记录键盘输入等内容:

随着时间的推移,SELinux政策也变得更加严格。您可以在platform/system/sepolicy存储库中看到其余部分。请注意,它在platform/external/sepolicy很长一段时间,但最近才被移动。

答案 1 :(得分:9)

这是为security and privacy reasons完成的。来自错误报告:

  

对于根(/)和/ sys文件系统,无法进行目录列表。

Google的官方回答:

  

您所描述的行为正在按预期运作。 Android提供应用程序必须运行的严格沙箱。这些沙箱保护应用程序数据免受其他应用程序的影响,包括应用程序元数据,如进程状态。

     众所周知,

/ sys和/ proc会泄漏有关进程的辅助通道信息,这些信息可用于推断有关进程的状态。例如,多年来已经记录了/ proc访问可用于监控应用程序启动,从而实现网络钓鱼攻击。