[ Android实战 ] selinux “域继承“的方案(通过属性机制实现)
[ Android实战 ] selinux "域继承"的方案(通过属性机制实现)
- 背景
- 对目录权限进行收紧
- 对属性管控进行收紧
- 总结
背景
随着项目的开发,对安全的要求越来越高,最近需要考虑对 selinux 权限进行收紧。
比如之前对于某些目录需要给普通应用读写或访问的,都一股脑地加到了同一个自定义的 selinux 域中。
应用开发中需要设置一些属性,也直接给普通应用开放了设置的权限。
但是现在回过头来审视这些改动,其实存在很多不合理的地方,权限放得太开了!
当时开发有多爽,现在需要收紧权限就有多难受,要考虑的事情就多了。
对目录权限进行收紧
以前我们定义了一个 android_shared_file
的域,用于映射允许普通应用访问的目录。
一开始我们只将 /data/public
和 /cache/data/public
目录映射到 android_shared_file
,允许 untrusted_app
进行读写。
但是随着项目开发的进行,发现某些目录和文件也需要被 untrusted_app
访问,比如 /data/protected
和 /cache/data/version
,然后也没有多想直接将它们映射到 android_shared_file
。
日积月累的,针对 untrusted_app
的权限就被放大了。
现在打算将 android_shared_file
的域细分为 android_shared_readable_file
和 android_shared_writeable_file
。
对于 untrusted_app
,只有 android_shared_writeable_file
才允许写,而 android_shared_readable_file
只允许读。
当然,对于 system_app
和 platform_app
等,仍保持原有的权限,允许对 android_shared_readable_file
和 android_shared_writeable_file
进行读写。
最笨最直接的方法是是重新定义新的域,然后在原来涉及 android_shared_file
的地方全部改一遍,把两个新的域的权限都定义好,这样肯定能解决问题。
但是这样改的地方太多了!
于是开始考虑是否有类似于 域继承 的方案。经过搜索引擎和 AI,终于找到了可行的方案。