1. 编写目的
本文档用于介绍 H6
Android N
SDK SE
linux 使用配置、规则制定。
2. Android SElinux 介绍
2.1 Android 安全增强功能
Android 安全增强功能又称为 SEAndroid,一款 Android 安全
解决方案,可确定及解 决关键性间隔问题。最初,SEAndroid 旨在 Android 中使用 SELinux,以便限制有缺陷或 恶意应用造成的损失,并强制隔离应用。但是,SEAndroid 所涵盖的范围已更改,可在SELinux 的基础上包含更多内容。SEAndroid 目前是在 Android 上执行 SELinux 强制访问控制 (MAC) 和中间件强制访问控制 (MMAC) 的整体框架。
简单介绍与 SEAndroid 相关的概念:
• 安全增强型 Linux (SELinux) 是一种强制访问控制的实现。它的做法是以最小权限原 则为基础,在 Linux 核心中使用 Linux 安全
模块 (LSM)。它并不是一款 Linux 发布版,而是一组可以应用在类 UNIX
操作系统(如 Linux 和 BSD)的修改。
• 自主访问控制 (
DAC) 是标准的 Linux 安全模型。在此模型中,访问权限基于
用户的身份和对象所有权。
• 强制访问控制 (MAC) 限制了主体(进程)和对象(文件、套接字和设备等)的权限。
2.2 SEAndroid 策略
SEAndroid 通过向
内核和用户空间添加 SELinux 支持来增强 Android 系统的安全性,Android 从 4.4 版开始引入 SEAndroid 的能力,在 Android 5.1 user 版本被设置成强制打开。
SEAndroid 的安全上下文与 SELinux 基本一致。四个组成部分:用户、角色、类型和敏感度,即 u: object_r: system_data_file: s0 说明如下:
• 用户:在 SEAndroid 中第一列安全上下文是用户并且只有一个 u。
• 角色:在 SEAndroid 中第二列表示角色 ,分别为 r 和 object_r。
• 类型:对于第三列类型,SEAndroid 确定了上百项不同的策略类型,如设备类型、进程类型、文件系统类型、网络类型和 IPC 类型等等。
• 安全级别:第四列专为多级安全功能(扩展 MLS)而设计,MLS 是一种访问机制,可增加安全上下文和格式敏感度 [: 类别列表] [-敏感度 [: 类别列表]],例如 s0 - s15: c0- c1023,而在当前 Android 版本中不需要类别。敏感度和类别组合表示当前的安全 级别,数字根据最低和最高级别的安全功能进行确定。此列参数被用于查看 MLS 限制,其中 ``15'' 和 ``1023'' 表示最大敏感度和类别。此参数范围可以在 Android.mk 中 进行确定,Android N 中默认配置为 ``1'' 和 ``1024'',代表敏感度只定义了 s0,类别列表定义了 c0-c1023。
SEAndroid策略源位于SDK system/sepolicy目录。该策略包括用于生成SELinux核心策略文件的源文件:file_contexts配置、property_contexts配置、se
APP_contexts配置和mac_permissions.xml配置。
• file_contexts 配置用于在构建(例如,系统分区)和运行时(例如,设备节点、服务套接字文件和由 init.rc 创建的/数据目录等)标记文件。
• property_contexts 被用于指定 Android 属性的安全上下文,供查看权限。
• seapp_contexts 配置被用于标记应用进程和应用程序包目录。
• mac_permissions.xml 配置是中间件 MAC 策略。
与设备相关的策略文件位于
device/softwinner/petrel-common/sepolicy 目录。
3. H6 SDK SElinux 使用和配置
本节主要介绍如何使用 H6 SDK,开启 SElinux 功能,并介绍如何配置策略。
3.1 Android N SElinux 开关
下图详细列出了 Android 启动过程 SElinux 加载逻辑。
在 Android N 上将 SELinux 关闭并保证系统正常功能较为困难,因此,H6 SDK 稍微调整 Android SElinux 开启策略如下:
• 内核启动 env.cfg 中的 boot command 增加 selinux 选项:
selinux=0,内核关闭 selinux;
selinux=1,内核打开 selinux,android 可配置 selinux 为 enforcing 模式或者 permissive 模式;
• 内核启动 env.cfg 中的 boot command 增加 selinux 选项:
androidboot.selinux = permissive,android 将 selinux 模式设为 permissive androidboot.selinux = enforcing,android 将 selinux 模式设为 enforcing• 内核中的 boot command 所有配置均可在产品目录中的 BoardConfig.mk 文件中配置,如下:
//android/device/softwinner/petrel-p1/BoardConfig.mk
BOARD_
kernel_CMDLINE := selinux=1 androidboot.selinux=enforcing cma=64M
• 当内核和 Android 同时存在对 boot command 的相同 key 配置时,以 Android 为准。
• SDK 默认所有版本 SElinux = 1 都是打开,保证系统可以正常启动。
• 在使用过程中,允许
串口输入 setenforce 0 临时将 SElinux 置为 Permissive 模式。
• 在使用过程中,可以在串口输入 getenforce 获取当前 SElinux 的工作模式,1 为enforcing,0 为 permissive。
更多详细内容请下载附件查看