> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 自定义安全服务

支持对内存和 SEPolicy 进行自定义。对于大尺寸的可信应用程序,您可以自定义内存区域。

## **自定义内存**

自定义内存功能仅面向拥有授权访问权限的许可用户。如果您有访问权限,请参阅 [Qualcomm Linux Security Guide - Addendum](https://docs.qualcomm.com/bundle/resource/topics/80-80021-11A/customize-fru.html)。

## **自定义 SEPolicy**

Qualcomm SEPolicy 依赖于上游 SEPolicy。因此,上游 SEPolicy 的 make 系统被用于构建和自定义 SEPolicy。

对上游 selinux 策略的自定义:

* 在 [SELinuxProject/refpolicy](https://github.com/SELinuxProject/refpolicy/) 上创建 Pull Request。
* 将更改以补丁形式存储在 `meta-qcom-distro/recipes-security/refpolicy/refpolicy-targeted/` 目录中,并将补丁包含到 SRC\_URI `meta-qcom-distro/recipes-security/refpolicy/refpolicy-targeted_git.bbappend` 中
* 在 [qualcomm-linux/meta-qcom-distro](https://github.com/qualcomm-linux/meta-qcom-distro) 上创建 Pull Request
* 将补丁发送到 \[meta-selinux][https://github.com/ni/meta-selinux。请参阅](https://github.com/ni/meta-selinux。请参阅) \[Steps to send patches to meta-selinux][https://github.com/ni/meta-selinux/blob/nilrt/master/scarthgap/MAINTAINERS。此步骤是可选的,因为在](https://github.com/ni/meta-selinux/blob/nilrt/master/scarthgap/MAINTAINERS。此步骤是可选的,因为在) meta-selinux 升级时,更改会自动从上游 refpolicy 同步。

对 ostree selinux 策略的自定义:

* 在现有 sepolicy 代码基础上创建补丁。
* 将更改以补丁形式存储在 `meta-updater/dynamic-layers/selinux/recipes-security/refpolicy/refpolicy-targeted/` 目录中,并将补丁包含到 SRC\_URI `meta-updater/dynamic-layers/selinux/recipes-security/refpolicy/refpolicy-targeted_git.bbappend` 中
* 在 [uptane/meta-updater](https://github.com/uptane/meta-updater) 上创建 Pull Request

对 qualcomm selinux 策略的自定义:

* 在现有 sepolicy 代码基础上创建补丁。
* 将更改以补丁形式存储在 `meta-qcom/dynamic-layers/selinux/recipes-security/refpolicy/refpolicy-targeted/` 目录中,并将补丁包含到 SRC\_URI `meta-qcom/dynamic-layers/selinux/recipes-security/refpolicy/refpolicy-targeted_git.bbappend` 中
* 在 [qualcomm-linux/meta-qcom](https://github.com/qualcomm-linux/meta-qcom) 上创建 Pull Request

为新服务/模块添加 sepolicy:

* 在现有 selinux 策略基础上创建新的 `<module_name>.fc`、`<module_name>.if`、`<module_name>.te` 文件,并添加所需的 selinux 规则。
* 将新模块上游到 [SELinuxProject/refpolicy](https://github.com/SELinuxProject/refpolicy/)。如果服务/模块是私有的,请跳过此步骤。
* 确定服务/模块所在的 yocto 层。在该层内,创建 `dynamic-layers/.../refpolicy-targeted/` 用于以补丁形式保存 sepolicy,并创建 `dynamic-layers/.../refpolicy-targeted_git.bbappend` 配方以包含补丁。

Qualcomm 代码被配置为模块化 SEPolicy 模式,SELinux 类型为 targeted。要修改 SEPolicy 模式和 SELinux 类型,请执行以下操作:

> * 要更改 SELinux 类型和模式,您可以编辑 [Selinux base file](https://github.com/qualcomm-linux/meta-qcom-distro/blob/main/conf/distro/include/qcom-distro-selinux.inc)。

### **编译 SEPolicy**

1. 设置构建环境。有关说明,请参阅 [Qualcomm Linux Build Guide](https://dragonwingdocs.qualcomm.com/Key-Documents/Firmware-Guide/build-firmware)。
2. 仅编译 selinux distro:
   ```text theme={null}
   kas build meta-qcom/ci/<machine-name>.yml:meta-qcom/ci/qcom-distro-selinux.yml
   ```
3. 编译 catchall distro(此 distro 包含 selinu 以及其他一些 distro 功能):
   ```text theme={null}
   kas build meta-qcom/ci/<machine-name>.yml:meta-qcom/ci/qcom-distro-catchall.yml
   ```

### **修改和构建**

您也可以增量地修改和构建。

Ubuntu 上的 audit2allow 和 research 工具不支持策略版本 35。您可以通过安装 policycoreutils-python-utils 来运行 audit2allow。

```text theme={null}
sudo apt install policycoreutils-python-utils
```

然后在此 shell 上运行 audit2allow。

从目标设备的 `/etc/selinux/targeted/policy/policy.35` 拉取策略版本 35。该策略也可在构建树中找到:`build/tmp/sysroots-components/<machine_name>/refpolicy-targeted/etc/selinux/targeted/policy/policy.35`

### **捕获拒绝记录**

如果 `denials.txt` 是捕获拒绝记录的文件,请使用以下命令解决这些拒绝:

```text theme={null}
audit2allow -i denails.txt -p policy.35
```

## **配置防重放保护内存块**

防重放保护内存块(RPMB)的配置在设备生命周期内是一次性过程,且不可逆。

* 为安全引导设备配置 RPMB:
  > * 在安全引导过程中,RPMB 会自动使用生产密钥进行配置。
  > * 不要在启用安全引导之前配置 RPMB。
  > * 对于安全引导设备,不要执行任何显式的 RPMB 配置步骤。
* 为非安全引导设备配置 RPMB:
  > * 您可以使用测试密钥配置 RPMB,用于测试和演练某些用例,以观察与安全引导设备类似的功能。示例用例包括:
  >   > * 安全文件系统(SFS)文件版本信息和防回滚保护
  >   > * 可信应用程序防回滚保护
  >
  > <Warning>
  >   一旦使用测试密钥配置了 RPMB,该设备将无法再启用安全引导。
  > </Warning>
  >
  > * 要使用测试密钥配置 RPMB,请参阅[验证 RPMB 配置状态](./verify-the-security-configurations-of-qualcomm-linux#verify-rpmb-provisioning-status)

## **后续步骤**

* 有关常见的日志记录和调试技术,请参阅[调试 Qualcomm TEE 和安全设备](./debug-qualcomm-tee-and-secure-devices)。
* 要了解如何开发和运行可信应用程序及客户端应用程序,以及获取示例代码和示例,请参阅[开发可信应用程序和客户端应用程序](./develop-trusted-and-client-applications)。
