AOSP开发:如何为系统应用授予/system目录的读取权限
实现思路
1. 调整目标文件/目录的固有权限
- 可以在镜像构建的
Android.mk或者Android.bp中,直接设置部署到/system下的目标文件权限:单文件设置LOCAL_MODULE_PERMISSIONS := 0644,目录设置为0755,同步配置LOCAL_MODULE_OWNER := system,保证system进程身份的应用可以直接读取 - 也可以在
device/[厂商]/[产品名]的设备配置脚本中,通过chmod/chown命令修改对应路径的权限,适合批量修改多个文件的场景
2. 配置SELinux权限(原生最稳妥方案)
/system分区默认开启SELinux强制访问控制,即便文件权限匹配,域不匹配也无法正常读取:
- 首先确认你的系统应用对应的SELinux域,默认走system进程的系统签名应用对应的域是
system_app - 在设备SELinux策略目录的
system_app.te文件中添加访问规则,如果是仅访问特定目录,建议先给对应目录定义单独的SELinux标签,在file_contexts中添加:
再补充授权规则:/system/你的自定义目录(/.*)? u:object_r:custom_system_file:s0allow system_app custom_system_file:dir r_dir_perms; allow system_app custom_system_file:file r_file_perms; - 非必要不要放开整个
system_file类型的读取权限,符合最小权限原则的同时也不会影响CTS认证结果
3. 应用层权限声明(适配高版本Android可选)
如果应用运行在Android 13及以上版本,部分定制ROM会对/system的访问做额外限制,可以在应用的AndroidManifest.xml中提前声明android.permission.READ_EXTERNAL_STORAGE或者ROM厂商自定义的/system访问权限,系统级应用声明后会直接被授予权限,不需要用户动态确认
内容的提问来源于stack exchange,提问作者Garry McKee
相关产品推荐
相关产品推荐

