有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

目前,我正试图弄清楚SELinux在Android上能做什么,我遇到了这个问题。基本上,我想看看我是否可以禁止访问。带有相册应用程序的jpeg文件。我可以同时获得图像的上下文和专辑应用程序的上下文。通过反射,我能够从安卓中调用setFileContext(字符串路径,字符串上下文)方法。操作系统。塞利努克斯。java,但它返回了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文件系统下更改上下文,为什么使用上述方法,新的上下文无法继续存在?有解决方案或解决办法吗

编辑:

所以我发现SELinux上下文是该文件的扩展,而fuse文件系统不支持这些扩展。当我尝试获取上下文时,我会获取该文件的默认上下文。这个默认上下文是否来自列表或其他文件,或者是否只有一个默认上下文来自SELinux。爪哇
编辑完毕

我的测试设备是HTC M8,带有安卓6和root访问权限

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


共 (1) 个答案

  1. # 1 楼答案

    首先通过运行禁用selinux:

    setenforce 0
    

    那么你的cmd可能会成功