android - Android Nougat 中的文件系统更改

标签 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 上工作。

最佳答案

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

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

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

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

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

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

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

关于android - Android Nougat 中的文件系统更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38590140/

相关文章:

c# - 在 Windows 7 上访问文件系统上的每个文件(无论如何)

android - xamarin 在整个网格列上形成拉伸(stretch)按钮

android - 无法在模拟器中启动 AVD。请确保英特尔 HAXM 已正确安装并可用

java - 安卓 Java : How to completely remove instance of ScheduledExecutorService when App is not in foreground

android ui - 周围是否有任何 android 向导框架?

ubuntu - 为什么 setuid 不以所有者身份运行?

bash - 删除名称为空(不可见)的文件有哪些好方法?

tree - WindowTester - 访问 rcp 客户端中的文件系统(树)项

c# - 优化文件操作

php - 如何为 Laravel 设置文件权限?