Android SELinux untrusted_app.te规则解读:为何无法写入/cache
我正在研究Android普通应用对应的SELinux规则,了解到普通应用归为untrusted_app域。查看对应的untrusted_app.te文件时,发现第79-81行有如下规则:
Write to /cache.allow untrusted_app cache_file:dir create_dir_perms;
allow untrusted_app cache_file:file create_file_perms;
但我在应用中尝试向/cache创建文件和文件夹时却被权限拒绝,是我对规则的解读有误吗?
问题排查与原因分析
SELinux上下文不匹配
/cache目录本身的SELinux上下文可能并非cache_file_t类型。你可以通过执行ls -Z /cache命令查看其实际上下文。如果/cache的类型是cache_root_t,那untrusted_app的规则就不适用——因为规则仅授权对cache_file类型的访问,而非cache_root_t。Android版本差异
你参考的untrusted_app.te版本对应的系统可能和测试设备版本不一致。不同Android版本的SEPolicy规则会有调整,比如在较新的版本中,普通应用被限制直接访问全局/cache,只能访问应用专属缓存目录(如/data/data/<包名>/cache)。DAC权限限制
除SELinux外,Android还有DAC(自主访问控制)限制。/cache的Linux文件权限可能不允许普通应用用户(通常是u:r:untrusted_app:s0)写入,可通过ls -l /cache查看权限位确认。宏定义权限范围
create_dir_perms和create_file_perms是SEPolicy宏,需确认其实际包含的权限。比如create_dir_perms通常包含add_name、create等,但如果/cache父目录未授权搜索权限,即使子目录有创建权限也无法生效。
内容的提问来源于stack exchange,提问作者localacct

