Android Nougat 中的文件系统更改

Posted

技术标签:

【中文标题】Android Nougat 中的文件系统更改【英文标题】:File system changes in Android Nougat 【发布时间】:2016-11-30 02:48:42 【问题描述】:

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

问题:

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


如何复制:

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

run-as com.debuggable.packagename
ls /

这会在 Android N 上出现权限被拒绝错误。


为什么要列出系统目录:

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

【问题讨论】:

根据this bug report,这是出于安全原因。 【参考方案1】:

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

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

来自谷歌的官方回答:

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

/sys 和 /proc 以泄露有关进程的侧通道信息而闻名,这些信息可用于推断有关进程的状态。例如,多年来一直有记录表明 /proc 访问可用于监控应用启动,从而启用网络钓鱼攻击。

【讨论】:

这是很棒的信息。我也在寻找源代码的变化。 另外,关于此更改如何解决问题的精彩视频:youtube.com/watch?v=SkvHA1jBpn8【参考方案2】:

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

procfs 文件系统现在使用 hidepid=2 挂载,从而消除了对其他用户的 /proc/PID 目录的访问。此更改在 CopperheadOS 中实现,然后基于它在上游采用。有一个例外的小组,但它没有作为许可公开。它仅用于对基本系统中的某些进程进行异常处理。它可能会被暴露为“危险”的许可,这是我预计 Google 最终会做的事情,但他们认为用户不会理解它的含义。

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

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

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

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

https://www.lightbluetouchpaper.org/2016/07/29/yet-another-android-side-channel/ https://staff.ie.cuhk.edu.hk/~khzhang/my-papers/2016-oakland-interrupt.pdf

随着时间的推移,SELinux 政策总体上也变得更加严格。您可以在 platform/system/sepolicy 存储库中查看其余内容。请注意,它在 platform/external/sepolicy 上已经有很长时间了,但它最近被移动了。

【讨论】:

所以在 OS N 中我们不能把所有的 proc @strcat 拿走?

以上是关于Android Nougat 中的文件系统更改的主要内容,如果未能解决你的问题,请参考以下文章

EditText中的标点符号 - Android Nougat

GoogleServices API 级别更改早于 Nougat(API 级别 24)

API 级别 24 中的前台服务 - Android 7.0 Nougat

该应用程序在 nougat api 7 ++ 上没有获得本地化更改效果

应用程序关闭时如何接收 Android Nougat 网络丢失的回调?

Android Nougat,Oreo - 如何将长按动作添加到快速切换?