【发布时间】:2017-03-08 21:35:35
【问题描述】:
目前我正试图弄清楚 SELinux 能够在 Android 上做什么,但我遇到了这个问题。基本上我想看看我是否可以禁止使用专辑应用程序访问 .jpeg 文件。我可以获得图像的上下文和相册应用程序进程的上下文。通过反射,我能够从 android.os.SELinux.java 调用 setFileContext(String path, String context) 方法,但它返回 false。
所以,我通过 adb shell 尝试了“chcon”命令,基本上得到了相同的结果。
chcon -v u:object_r:fuse:s1 ./storage/emulated/0/DCIM/100MEDIA/IMAG0001.jpg
chcon './storage/emulated/0/DCIM/100MEDIA/IMAG0001.jpg' to u:object_r:fuse:s1
chcon: './storage/emulated/0/DCIM/100MEDIA/IMAG0001.jpg' to u:object_r:fuse:s1:
Operation not supported on transport endpoint
经过一番研究,我发现只有文件在 ext4 文件系统上才能更改上下文,但图像在 fuse 文件系统下。但是当我把图像放到一个 ext4 格式的分区,改变那里的上下文(这确实有效)并将它放回原始目录时,旧的上下文又回来了。
有人可以向我解释为什么会这样吗?为什么在fuse文件系统下context不能改变,为什么新的context不能存活,使用上面的方法?是否有解决方案或解决方法?
编辑:
所以我发现 SELinux 上下文是文件的扩展,而 fuse 文件系统不支持这些。当我尝试获取上下文时,我得到了该文件的默认上下文。这个默认上下文是来自列表或其他文件,还是只有一个来自 SELinux.java 的默认上下文?
编辑完毕。
我的测试设备是具有 Android 6 和 root 访问权限的 HTC M8。
提前致谢,非常感谢您的努力!
【问题讨论】:
-
你解决了吗?