我有一个带有一些C代码的Android应用程序,它使用link(2)系统调用来创建指向现有文件的硬链接。当我在Android 5.0.2上执行应用程序时,应用程序的这一部分可以运行。当我在Android-M设备上执行完全相同的应用程序时,link()系统调用返回-1"权限被拒绝"。
我在日志中注意到这样的消息:
09-02 17:10:34.222 5291 5291 W ona.crackerjack: type=1400 audit(0.0:59): avc: denied { link } for name="fixed28" dev="mmcblk0p28" ino=82829 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:app_data_file:s0:c512,c768 tclass=lnk_file permissive=0
此消息显示在我应用的日志消息附近,其中link()返回-1"权限被拒绝"有时更早,有时更晚。
创建一个被认为不安全的硬链接?我注意到" scontext = u:r:untrusted_app"。有没有办法让应用程序受信任,如果有,那会让link()系统调用吗?
答案 0 :(得分:6)
显然有新的SELinux规则,禁止制作硬链接(或者可能访问文件夹或文件)。
普通用户无法改变SELinux规则,即使使用root权限,这也不是直截了当的。
有关SELinux的更多信息:https://source.android.com/devices/tech/security/selinux/
答案 1 :(得分:4)
看起来这是“按设计”。
在https://code.google.com/p/android-developer-preview/issues/detail?id=3150,项目成员解释说:
硬链接文件被阻止,并且将返回尝试调用文件上的link() EACCES。