SELinux_Treble学习记录
参考文档:https://source.android.google.cn/security/selinux/images/SELinux_Treble.pdf
android-8.0在android框架上有了大的改动,引入了Treble元素,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。其中一点就是SELinux的改动。
SELinux是一个用于控制路径、设备、文件、进程、socket的读写权限标签系统,这个标签也被称为context。
android-4.4至android7.0将全部的SELinux策略(platform 和 non-platform)build到了root目录下的一个文件中,这样一来每当有policy改动时SoC vendor和ODM partners就不得不改动boot.img(non-A/B devices)或system.img(A/B devices)。可想而知引起的改动之大。
android-8.0后实现了策略模块化,vendors和partners只需要改动涉及他们对应的分区内容。
android 设备的分区
分区 | 归属 | 说明 | 是否必须 |
---|
bootloader.img | ODM | 用于启动kernel | Y | odm.img | ODM | 包含设备特定代码和配置 | N | boot.img | android platform | (kernel/ramdisk)包含linux kernel + android pacthes | Y | recovery.img | android platform | 刷机 | N | system.img | android platform | 包含多数android framework | Y | verdor.img | SOC Vendor | 包含 SoC特定代码和配置 | N | radio | SOC Vendor | 包含专有调制 | N | oem.img | OEM | 包含DEM和运营商先关配置 | N |
主要路径:
一、SElinux的toybox命令行
@ /external/toybox/toys/android/
设置当前 SELinux 模式:
@ /external/toybox/toys/android/setenforce.c 命令:setenforce 0,或者 setenforce permissive,设置为宽容模式。 命令:setenforce 1,或者 setenforce enforcing,设置为强制模式。 注意,前提是selinux 是 enable的。
获取当前 SELinux 模式:
@external/toybox/toys/android/getenforce.c 命令:getenforce,会获取到三种状态,Disable,Enforcing,Permissive。
其他命令
getprop、load_policy、log、restorecon、runcon、sendevent、setprop、start等。
二、selinux的配套命令行工具实现
@ external/selinux, 1)toybox命令调用的具体实现,@external/selinux/libselinux/ 2)检测(chkcon)和执行(libsepol)二进制安全策略,@external/selinux/libsepol/ 3)SELinux编译器,依赖libsepol,@external/selinux/checkpolicy/
三、android SELinux策略配置
@system/sepolicy/,该目录一般不允许修改。 编译后会包含 SELinux 内核安全策略,并涵盖上游 Android 操作系统。 包含:
- 上下文描述文件(xxx_contexts),为对象指定标签。
- 策略文件(*.te),用于定义域(domain)及其标签(lable)。
- Android.bp/.mk,build 逻辑。
四、自定义policy文件
@/device/manufacturer/device-name/sepolicy/ 新增policy时需要在device目录下目录,然后注意修改/device/manufacturer/device-name/BoardConfig.mk以引用 sepolicy 子目录和每个新的policy文件。
内核中启用 SELinux
CONFIG_SECURITY_SELINUX=y
|