在 Android 上更改文件的 SELinux 上下文无法正常工作

问题描述 投票:0回答:2

目前我正在尝试弄清楚 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 文件系统上时才能更改上下文,但图像位于 fusion 文件系统下。但是当我将图像放入 ext4 格式的分区,更改那里的上下文(这确实有效)并将其放回原始目录时,旧的上下文又回来了。

有人可以向我解释一下为什么会这样吗?使用上面的方法,为什么在fuse文件系统下无法更改上下文以及为什么新的上下文无法生存?有解决办法或解决方法吗?

编辑:

所以我发现 SELinux 上下文是文件的扩展,而 fusion 文件系统不支持这些。当我尝试获取上下文时,我得到该文件的默认上下文。这个默认上下文是来自列表或其他文件,还是只有一个来自 SELinux.java 的默认上下文?
编辑结束。

我的测试设备是具有 Android 6 和 root 访问权限的 HTC M8。

提前致谢,非常感谢您的努力!

java android selinux
2个回答
0
投票

首先通过运行禁用selinux:

setenforce 0

那么你的cmd可能会成功。


0
投票

不要在fuse文件系统上更改它(

/sdcard
/storage/emulated/0/
)。使用 root 权限更改
/data/media/0
目录下的上下文是可行的。

例如(在 adb root shell 中)

cd /data/media/0/DCIM/Camera
chcon u:object_r:shell_data_file:s0 2023-05-24-16-44-29-540.jpg

在我的示例中,文件的原始上下文是

u:object_r:media_rw_data_file:s0:c170,c256,c512,c768
,将其更改为
u:object_r:shell_data_file:s0
后,
ls -Z
显示上下文已更改,图库应用程序无法再打开此文件。

© www.soinside.com 2019 - 2024. All rights reserved.