From e49dcc147e0c312bc1aacd1dea0eadfa0202e390 Mon Sep 17 00:00:00 2001 From: Qing_LKYi <597572246@qq.com> Date: Tue, 18 Mar 2025 00:59:17 +0800 Subject: [PATCH 1/2] fix markdownlint and linebreak --- ...57\344\277\241\350\256\241\347\256\227.md" | 192 ++++++++++++------ 1 file changed, 126 insertions(+), 66 deletions(-) diff --git "a/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" index 75efb96b4b..c422738458 100644 --- "a/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" +++ "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" @@ -22,7 +22,6 @@ - ## 可信计算基础 ### 可信计算 @@ -174,19 +173,19 @@ IMA 首先使用安全扩展属性 security.ima 和 security.evm 存储文件完 IMA 摘要列表扩展当前提供对以下三种启动参数组合的支持: -* IMA measurement 度量模式: +- IMA measurement 度量模式: ```shell ima_policy=exec_tcb ima_digest_list_pcr=11 ``` -* IMA appraisal 日志模式 + IMA measurement 度量模式: +- IMA appraisal 日志模式 + IMA measurement 度量模式: ```shell ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest ``` -* IMA appraisal 强制模式 + IMA measurement 度量模式: +- IMA appraisal 强制模式 + IMA measurement 度量模式: ```shell ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sha256 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest @@ -269,11 +268,11 @@ OBS 全称 Open Build Service,是一种编译系统,最早在 openSUSE 用 进行摘要列表构建之前,首先确保您的工程包含以下 rpm 包,且来自 openEuler: -* digest-list-tools -* pesign-obs-integration -* selinux-policy -* rpm -* openEuler-rpm-config +- digest-list-tools +- pesign-obs-integration +- selinux-policy +- rpm +- openEuler-rpm-config 在交付件工程中增加 Project Config: @@ -284,13 +283,13 @@ Macros: :Macros ``` -* 在 Preinstall 中新增 digest-list-tools 用于生成摘要列表,pesign-obs-integration 用于生成摘要列表的签名,新增 selinux-policy-targeted 用于确保生成摘要列表时构建环境内 SELinux 标签正确。 -* 在 Macros 中定义宏 %__brp_digest_list,rpm 将在构建阶段通过这个宏执行命令为编译完成的二进制文件生成摘要列表。这个宏可以作为一个开关控制工程中的摘要列表是否生成。 +- 在 Preinstall 中新增 digest-list-tools 用于生成摘要列表,pesign-obs-integration 用于生成摘要列表的签名,新增 selinux-policy-targeted 用于确保生成摘要列表时构建环境内 SELinux 标签正确。 +- 在 Macros 中定义宏 %__brp_digest_list,rpm 将在构建阶段通过这个宏执行命令为编译完成的二进制文件生成摘要列表。这个宏可以作为一个开关控制工程中的摘要列表是否生成。 配置完成后,OBS 会自动执行全量构建,正常情况下构建完成后,软件包中会新增以下两个文件: -* /etc/ima/digest_lists/0-metadata_list-compact-[包名]-[版本号] -* /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-[包名]-[版本号] +- /etc/ima/digest_lists/0-metadata_list-compact-[包名]-[版本号] +- /etc/ima/digest_lists.tlv/0-metadata_list-compact_tlv-[包名]-[版本号] #### 在 Koji 上进行摘要列表构建 @@ -300,44 +299,44 @@ Koji 是 Fedora 社区的编译系统,openEuler 社区将在后续支持,敬 1. 为什么进入 enforce 模式后系统无法启动或启动后命令无法执行/服务不正常? - enforce 模式下 IMA 会对文件访问做控制,如果访问文件的内容或扩展属性不完整,就会被拒绝访问,当影响启动的关键命令无法执行时,就会造成系统无法启动。 + enforce 模式下 IMA 会对文件访问做控制,如果访问文件的内容或扩展属性不完整,就会被拒绝访问,当影响启动的关键命令无法执行时,就会造成系统无法启动。 - 请确认是否存在以下问题: + 请确认是否存在以下问题: - * **摘要列表是否被加入到 initrd 中?** + - **摘要列表是否被加入到 initrd 中?** - 初次部署时是否执行了 dracut 命令将摘要列表加入内核?如果摘要列表没有加入 initrd,启动阶段就无法导入摘要列表,从而导致启动失败。 + 初次部署时是否执行了 dracut 命令将摘要列表加入内核?如果摘要列表没有加入 initrd,启动阶段就无法导入摘要列表,从而导致启动失败。 - * **是否使用官方提供的 rpm 包?** + - **是否使用官方提供的 rpm 包?** - 如果使用的是非 openEuler 官方提供的 rpm 包,rpm 包可能没有携带摘要列表,或者对摘要列表签名的私钥与内核中的验签公钥不匹配,从而导致摘要列表没有被导入内核。 + 如果使用的是非 openEuler 官方提供的 rpm 包,rpm 包可能没有携带摘要列表,或者对摘要列表签名的私钥与内核中的验签公钥不匹配,从而导致摘要列表没有被导入内核。 - 如果原因还不明确,可以进入 log 模式启动,从错误日志中寻找原因: + 如果原因还不明确,可以进入 log 模式启动,从错误日志中寻找原因: - ```shell - $ dmesg | grep appraise - ``` + ```shell + $ dmesg | grep appraise + ``` 2. 为什么 enforce 模式下没有对系统文件做访问控制? - 系统没有按照预期对文件执行访问控制,首先查看启动参数中的 IMA 策略是否已被正确配置: + 系统没有按照预期对文件执行访问控制,首先查看启动参数中的 IMA 策略是否已被正确配置: - ```shell - $ cat /proc/cmdline - ...ima_policy=exec_tcb|appraise_exec_tcb|appraise_exec_immutable... - ``` + ```shell + $ cat /proc/cmdline + ...ima_policy=exec_tcb|appraise_exec_tcb|appraise_exec_immutable... + ``` - 其次查看当前内核中 IMA 策略是否已生效: + 其次查看当前内核中 IMA 策略是否已生效: - ```shell - $ cat /sys/kernel/security/ima/policy - ``` + ```shell + $ cat /sys/kernel/security/ima/policy + ``` - 如果 policy 文件是空的,证明策略没有设置成功,系统也就不会进行访问控制。 + 如果 policy 文件是空的,证明策略没有设置成功,系统也就不会进行访问控制。 3. 初次部署完成后,安装/升级/卸载软件包后还需要手动执行 dracut 生成 initrd 吗? - 不需要。rpm 包提供的 digest_list.so 插件能够在 rpm 包粒度提供摘要列表的自动更新,可以实现用户对摘要列表的无感知。 + 不需要。rpm 包提供的 digest_list.so 插件能够在 rpm 包粒度提供摘要列表的自动更新,可以实现用户对摘要列表的无感知。 ### 附录 @@ -358,10 +357,10 @@ Koji 是 Fedora 社区的编译系统,openEuler 社区将在后续支持,敬 其中,`/sys/kernel/security/evm` 的取值有以下四种: -* 0:EVM 未初始化; -* 1:使用 HMAC(对称加密)方式校验扩展属性完整性; -* 2:使用公钥验签(非对称加密)方式校验扩展属性完整性; -* 6:关闭扩展属性完整性校验(openEuler 使用此方式)。 +- 0:EVM 未初始化; +- 1:使用 HMAC(对称加密)方式校验扩展属性完整性; +- 2:使用公钥验签(非对称加密)方式校验扩展属性完整性; +- 6:关闭扩展属性完整性校验(openEuler 使用此方式)。 IMA 摘要列表扩展额外提供的 securityfs 接口如下: @@ -381,9 +380,9 @@ IMA 摘要列表扩展额外提供的 securityfs 接口如下: - func:表示被度量或鉴定的文件类型,常和 mask 匹配使用,一条策略只能选一个 func。 - - FILE_CHECK 只能同 MAY_EXEC、MAY_WRITE、MAY_READ 匹配使用。 - - MODULE_CHECK、MMAP_CHECK、BPRM_CHECK 只能同 MAY_EXEC 匹配使用。 - - 匹配关系以外的组合不会产生效果。 + - FILE_CHECK 只能同 MAY_EXEC、MAY_WRITE、MAY_READ 匹配使用。 + - MODULE_CHECK、MMAP_CHECK、BPRM_CHECK 只能同 MAY_EXEC 匹配使用。 + - 匹配关系以外的组合不会产生效果。 - mask:表示文件在做什么操作时将被度量或鉴定,一条策略只能选一个 mask。 @@ -459,7 +458,7 @@ IMA 摘要列表扩展额外提供的 securityfs 接口如下: 启动参数 `ima_policy=tcb` 对应的 IMA 策略为: -``` +```ini # PROC_SUPER_MAGIC = 0x9fa0 dont_measure fsmagic=0x9fa0 # SYSFS_MAGIC = 0x62656572 @@ -493,7 +492,7 @@ measure func=FIRMWARE_CHECK 启动参数 `ima_policy=tcb_appraise` 对应的 IMA 策略为: -``` +```ini # PROC_SUPER_MAGIC = 0x9fa0 dont_appraise fsmagic=0x9fa0 # SYSFS_MAGIC = 0x62656572 @@ -525,7 +524,7 @@ appraise fowner=0 启动参数 `ima_policy=secure_boot` 对应的 IMA 策略为: -``` +```ini appraise func=MODULE_CHECK appraise_type=imasig appraise func=FIRMWARE_CHECK appraise_type=imasig appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig @@ -555,7 +554,7 @@ IMA 摘要列表特性额外引入的内核启动参数如下: 启动参数 `ima_policy=exec_tcb` 对应的 IMA 策略为: -``` +```ini dont_measure fsmagic=0x9fa0 dont_measure fsmagic=0x62656572 dont_measure fsmagic=0x64626720 @@ -578,7 +577,7 @@ measure parser 启动参数 `ima_policy=appraise_exec_tcb` 对应的 IMA 策略为: -``` +```ini appraise func=MODULE_CHECK appraise_type=imasig appraise func=FIRMWARE_CHECK appraise_type=imasig appraise func=KEXEC_KERNEL_CHECK appraise_type=imasig @@ -600,7 +599,7 @@ dont_appraise fsmagic=0x63677270 启动参数 `ima_policy=appraise_exec_immutable` 对应的 IMA 策略为: -``` +```ini appraise func=BPRM_CHECK appraise_type=imasig appraise_type=meta_immutable appraise func=MMAP_CHECK appraise parser appraise_type=imasig @@ -641,13 +640,13 @@ IMA 摘要列表扩展额外提供的编译选项如下: 当前openEuler使用RPM密钥对IMA摘要列表进行签名,为保证IMA功能开箱可用,openEuler内核编译时默认将RPM根证书(PGP证书)导入内核。当前共包含两本PGP证书,分别为旧版本使用的OBS证书和openEuler 22.03 LTS SP3版本切换的openEuler证书: -``` -# cat /proc/keys | grep PGP +```shell +$ cat /proc/keys | grep PGP 1909b4ad I------ 1 perm 1f030000 0 0 asymmetri private OBS b25e7f66: PGP.rsa b25e7f66 [] 2f10cd36 I------ 1 perm 1f030000 0 0 asymmetri openeuler fb37bc6f: PGP.rsa fb37bc6f [] ``` -由于当前内核不支持导入PGP子公钥,而切换后的openEuler证书采用子密钥签名,因此openEuler内核编译前对证书进行了预处理,抽取子公钥并导入内核,具体处理流程可见内核软件包代码仓内的process_pgp_certs.sh脚本文件:https://gitee.com/src-openeuler/kernel/blob/openEuler-22.03-LTS-SP3/process_pgp_certs.sh。 +由于当前内核不支持导入PGP子公钥,而切换后的openEuler证书采用子密钥签名,因此openEuler内核编译前对证书进行了预处理,抽取子公钥并导入内核,具体处理流程可见内核软件包代码仓内的process_pgp_certs.sh脚本文件:[https://gitee.com/src-openeuler/kernel/blob/openEuler-22.03-LTS-SP3/process_pgp_certs.sh](https://gitee.com/src-openeuler/kernel/blob/openEuler-22.03-LTS-SP3/process_pgp_certs.sh)。 如果用户不使用IMA摘要列表功能或使用其他密钥实现签名/验签,则可将相关代码移除,自行实现内核根证书配置。 @@ -675,11 +674,11 @@ IMA 摘要列表扩展额外提供的编译选项如下: $ yum install kunpengsecl-ras kunpengsecl-rac kunpengsecl-rahub kunpengsecl-qcaserver kunpengsecl-attester kunpengsecl-tas kunpengsecl-devel ``` -1. 准备数据库环境:进入 `/usr/share/attestation/ras` 目录,执行 `prepare-database-env.sh` 脚本进行自动化的数据库环境配置。 +2. 准备数据库环境:进入 `/usr/share/attestation/ras` 目录,执行 `prepare-database-env.sh` 脚本进行自动化的数据库环境配置。 -1. 程序运行时依赖的配置文件有三个路径,分别为:当前路径 `./config.yaml` ,家路径 `${HOME}/.config/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` ,以及系统路径 `/etc/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` 。 +3. 程序运行时依赖的配置文件有三个路径,分别为:当前路径 `./config.yaml` ,家路径 `${HOME}/.config/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` ,以及系统路径 `/etc/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)/config.yaml` 。 -1. (可选)如果需要创建家目录配置文件,可在安装好rpm包后,执行位于 `/usr/share/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)` 下的脚本 `prepare-ras(rac)(hub)(qca)(attester)(tas)conf-env.sh` 从而完成家目录配置文件的部署。 +4. (可选)如果需要创建家目录配置文件,可在安装好rpm包后,执行位于 `/usr/share/attestation/ras(rac)(rahub)(qcaserver)(attester)(tas)` 下的脚本 `prepare-ras(rac)(hub)(qca)(attester)(tas)conf-env.sh` 从而完成家目录配置文件的部署。 ### 相关参数 @@ -687,7 +686,7 @@ IMA 摘要列表扩展额外提供的编译选项如下: 命令行输入 `ras` 即可启动RAS程序。请注意,在当前目录下需要提供**ECDSA**公钥并命名为 `ecdsakey.pub` 。相关参数如下: -``` +```text -H --https http/https模式开关,默认为https(true),false=http -h --hport https模式下RAS监听的restful api端口 -p, --port string RAS监听的client api端口 @@ -699,14 +698,14 @@ IMA 摘要列表扩展额外提供的编译选项如下: ``` **注意:** ->1.若要使用TEE远程证明特性,需要预装由TEE团队提供的**libqca.so**库和**libteec.so**库。 +>1.若要使用TEE远程证明特性,需要预装由TEE团队提供的**libqca.so**库和**libteec.so**库。 >2.若不使用TEE远程证明特性,需要将 `${DESTDIR}/usr/share/attestation/qcaserver` 目录下的libqca.so库和libteec.so库复制到 `/usr/lib` 或 `/usr/lib64` 目录。 #### RAC启动参数 命令行输入 `sudo raagent` 即可启动RAC程序,请注意,物理TPM模块的开启需要sudo权限。相关参数如下: -``` +```text -s, --server string 指定待连接的RAS服务端口 -t, --test 以测试模式启动 -v, --verbose 打印更详细的RAC运行时日志信息 @@ -718,17 +717,20 @@ IMA 摘要列表扩展额外提供的编译选项如下: **注意:** >1.若要使用TEE远程证明特性,需要以非TA测试模式启动RAC,并将待证明TA的uuid、是否使用TCB、mem_hash和img_hash按序放入RAC执行路径下的**talist**文件内。**talist**文件格式如下: +> >``` >e08f7eca-e875-440e-9ab0-5f381136c600 false ccd5160c6461e19214c0d8787281a1e3c4048850352abe45ce86e12dd3df9fde 46d5019b0a7ffbb87ad71ea629ebd6f568140c95d7b452011acfa2f9daf61c7a >``` +> >2.若不使用TEE远程证明特性,需要TA测试模式启动RAC。 +> >3.若无法使能物理TPM模块,需要以测试模式启动RAC。我们提供了一组测试模式下的平台基准值文件供RAC读取,在启动RAC前需要将 `$(DESTDIR)/etc/attestation/default_test` 目录下的文件复制到RAC运行目录下。 #### QCA启动参数 命令行输入 `${DESTDIR}/usr/bin/qcaserver` 即可启动QCA程序,请注意,这里必须要使用qcaserver的完整路径以正常启动QTA,同时需要使QTA中的CA路径参数与该路径保持相同。相关参数如下: -``` +```text -C, --scenario int 设置程序的应用场景,默认为no_as场景(0),1=as_no_daa场景,2=as_with_daa场景 -S, --server string 指定开放的服务器地址/端口 ``` @@ -737,7 +739,7 @@ IMA 摘要列表扩展额外提供的编译选项如下: 命令行输入 `attester` 即可启动ATTESTER程序。相关参数如下: -``` +```text -B, --basevalue string 设置基准值文件读取路径 -M, --mspolicy int 设置度量策略,默认为-1,需要手动指定。1=仅比对img-hash值,2=仅比对hash值,3=同时比对img-hash和hash两个值 -S, --server string 指定待连接的服务器地址 @@ -750,12 +752,13 @@ IMA 摘要列表扩展额外提供的编译选项如下: 命令行输入 `tas` 即可启动TAS程序。相关参数如下: -``` +```text -T, --token 生成一个测试用的验证码并退出 ``` **注意:** >1.若要启用TAS服务,需要先为TAS配置好私钥。可以按如下命令修改家目录下的配置文件: +> >```shell >$ cd ${HOME}/.config/attestation/tas >$ vim config.yaml @@ -769,6 +772,7 @@ IMA 摘要列表扩展额外提供的编译选项如下: > DAA_GRP_KEY_SK_X: 65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c65a9bf91ac8832379ff04dd2c6def16d48a56be244f6e19274e97881a776543c > DAA_GRP_KEY_SK_Y: 126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56126f74258bb0ceca2ae7522c51825f980549ec1ef24f81d189d17e38f1773b56 >``` +> >之后再输入`tas`启动TAS程序。 > >2.在有TAS环境中,为提高QCA配置证书的效率,并非每一次启动都需要访问TAS以生成相应证书,而是通过证书的本地化存储,即读取QCA侧 `config.yaml` 中配置的证书路径,通过 `func hasAKCert(s int) bool` 函数检查是否已有TAS签发的证书保存于本地,若成功读取证书,则无需访问TAS,若读取证书失败,则需要访问TAS,并将TAS返回的证书保存于本地。 @@ -804,61 +808,82 @@ IMA 摘要列表扩展额外提供的编译选项如下: 上述接口的具体用法分别介绍如下。 若需要查询所有服务器的信息,可以使用`"/"`接口。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/ ``` + *** 若需要查询目标服务器的详细信息,可以使用`"/{id}"`接口的`GET`方法,其中{id}是RAS为目标服务器分配的唯一标识号。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1 ``` + *** 若需要修改目标服务器的信息,可以使用`"/{id}"`接口的`POST`方法,其中$AUTHTOKEN是事先使用`ras -T`自动生成的身份验证码。 + ```go type clientInfo struct { Registered *bool `json:"registered"` // 目标服务器注册状态 IsAutoUpdate *bool `json:"isautoupdate"`// 目标服务器基准值更新策略 } ``` + ```shell $ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 -d '{"registered":false, "isautoupdate":false}' ``` + *** 若需要删除目标服务器,可以使用`"/{id}"`接口的`DELETE`方法。 ->**注意:** +**注意:** >使用该方法并非删除目标服务器的所有信息,而是把目标服务器的注册状态置为`false`! + ```shell $ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1 ``` + *** 若需要查询指定范围内的所有服务器信息,可以使用`"/{from}/{to}"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/9 ``` + *** 若需要查询目标服务器的所有可信报告,可以使用`"/{id}/reports"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports ``` + *** 若需要查询目标服务器指定可信报告的详细信息,可以使用`"/{id}/reports/{reportid}"`接口的`GET`方法,其中{reportid}是RAS为目标服务器指定可信报告分配的唯一标识号。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/reports/1 ``` + *** 若需要删除目标服务器指定可信报告,可以使用`"/{id}/reports/{reportid}"`接口的`DELETE`方法。 + **注意:** >使用该方法将删除指定可信报告的所有信息,将无法再通过接口对该报告进行查询! + ```shell $ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/reports/1 ``` + *** 若需要查询目标服务器的所有基准值,可以使用`"/{id}/basevalues"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues ``` + *** 若需要给目标服务器新增一条基准值信息,可以使用`"/{id}/newbasevalue"`接口的`POST`方法。 + ```go type baseValueJson struct { BaseType string `json:"basetype"` // 基准值类型 @@ -871,56 +896,74 @@ type baseValueJson struct { IsNewGroup bool `json:"isnewgroup"` // 是否为一组新的基准值 } ``` + ```shell $ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/newbasevalue -d '{"name":"test", "basetype":"host", "enabled":true, "pcr":"testpcr", "bios":"testbios", "ima":"testima", "isnewgroup":true}' ``` + *** 若需要查询目标服务器指定基准值的详细信息,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`GET`方法,其中{basevalueid}是RAS为目标服务器指定基准值分配的唯一标识号。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 ``` + *** 若需要修改目标服务器指定基准值的可用状态,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`POST`方法。 + ```shell $ curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/basevalues/1 -d '{"enabled":true}' ``` + *** 若需要删除目标服务器指定基准值,可以使用`"/{id}/basevalues/{basevalueid}"`接口的`DELETE`方法。 **注意:** >使用该方法将删除指定基准值的所有信息,将无法再通过接口对该基准值进行查询! + ```shell $ curl -X DELETE -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/1/basevalues/1 ``` + *** 若需要查询目标服务器上特定用户 TA 的可信状态,可以使用`"/{id}/ta/{tauuid}/status"`接口的GET方法。其中{id}是RAS为目标服务器分配的唯一标识号,{tauuid}是特定用户 TA 的身份标识号。 + ```shell $ curl -X GET -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/status ``` + *** 若需要查询目标服务器上特定用户 TA 的所有基准值信息,可以使用`"/{id}/ta/{tauuid}/tabasevalues"`接口的GET方法。 + ```shell $ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues ``` + *** 若需要查询目标服务器上特定用户 TA 的指定基准值的详细信息,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的GET方法。其中{tabasevalueid}是RAS为目标服务器上特定用户 TA 的指定基准值分配的唯一标识号。 ```shell $ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tabasevalues/1 ``` + *** 若需要修改目标服务器上特定用户 TA 的指定基准值的可用状态,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的`POST`方法。 + ```shell $ curl -X POST -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40002/1/ta/test/tabasevalues/1 --data '{"enabled":true}' ``` + *** 若需要删除目标服务器上特定用户 TA 的指定基准值,可以使用`"/{id}/ta/{tauuid}/tabasevalues/{tabasevalueid}"`接口的`DELETE`方法。 **注意:** >使用该方法将删除指定基准值的所有信息,将无法再通过接口对该基准值进行查询! + ```shell $ curl -X DELETE -H "Content-type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/tabasevalues/1 ``` + *** 若需要给目标服务器上特定用户 TA 新增一条基准值信息,可以使用`"/{id}/ta/{tauuid}/newtabasevalue"`接口的`POST`方法。 + ```go type tabaseValueJson struct { Uuid string `json:"uuid"` // 用户 TA 的标识号 @@ -929,38 +972,51 @@ type tabaseValueJson struct { Valueinfo string `json:"valueinfo"` // 镜像哈希值和内存哈希值 } ``` + ```shell $ curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" -k http://localhost:40002/1/ta/test/newtabasevalue -d '{"uuid":"test", "name":"testname", "enabled":true, "valueinfo":"test info"}' ``` + *** 若需要查询目标服务器上特定用户 TA 的所有可信报告,可以使用`"/{id}/ta/{tauuid}/tareports"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports ``` + *** 若需要查询目标服务器上特定用户 TA 的指定可信报告的详细信息,可以使用`"/{id}/ta/{tauuid}/tareports/{tareportid}"`接口的`GET`方法,其中{tareportid}是RAS为目标服务器上特定用户 TA 的指定可信报告分配的唯一标识号。 + ```shell $ curl -X GET -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 ``` + *** 若需要删除目标服务器上特定用户 TA 的指定可信报告,可以使用`"/{id}/ta/{tauuid}/tareports/{tareportid}"`接口的`DELETE`方法。 **注意:** >使用该方法将删除指定可信报告的所有信息,将无法再通过接口对该报告进行查询! + ```shell $ curl -X DELETE -H "Content-type: application/json" http://localhost:40002/1/ta/test/tareports/2 ``` + *** 若需要获取本程序的版本信息,可以使用`"/version"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/version ``` + *** 若需要查询目标服务器/RAS/数据库的配置信息,可以使用`"/config"`接口的`GET`方法。 + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/config ``` + *** 若需要修改目标服务器/RAS/数据库的配置信息,可以使用`"/config"`接口的`POST`方法。 + ```go type cfgRecord struct { // 目标服务器配置 @@ -974,6 +1030,7 @@ type cfgRecord struct { LogTestMode *bool `json:"logtestmode" form:"logtestmode"` } ``` + ```shell $ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json" http://localhost:40002/config -d '{"hbduration":"5s","trustduration":"20s","DigestAlgorithm":"sha256"}' ``` @@ -987,36 +1044,39 @@ $ curl -X POST -H "Authorization: $AUTHTOKEN" -H "Content-Type: application/json | /config | GET、POST | 若需要查询TAS的配置信息,可使用`"/config"`接口的`GET`方法: + ```shell $ curl -X GET -H "Content-Type: application/json" http://localhost:40009/config ``` + *** 若需要修改TAS的配置信息,可使用`"/config"`接口的`POST`方法: + ```shell curl -X POST -H "Content-Type: application/json" -H "Authorization: $AUTHTOKEN" http://localhost:40009/config -d '{"basevalue":"testvalue"}' ``` + **注意:** >TAS的配置信息读取与修改目前仅支持基准值 ### FAQ + 1. RAS安装后,为什么无法启动? >因为在当前RAS的设计逻辑中,程序启动后需要从当前目录查找一份名为 `ecdsakey.pub` 的文件进行读取并作为之后访问该程序的身份验证码,若当前目录没有该文件,则RAS启动会报错。 >>解决方法一:运行 `ras -T` 生成测试用token后会生成 `ecdsakey.pub` 。 >>解决方法二:自行部署oauth2认证服务后,将对应JWT token生成方对应的验证公钥保存为 `ecdsakey.pub` 。 -1. 为什么RAS启动后,通过restapi无法访问? +2. 为什么RAS启动后,通过restapi无法访问? >因为RAS默认以https模式启动,您需要向RAS提供合法的证书才能正常访问,而http模式下启动的RAS则不需要提供证书。 -1. 为什么RAS/ATTESTER启动后,会出现 “WARNING: failed to verify x509 cert” 的问题? +3. 为什么RAS/ATTESTER启动后,会出现 “WARNING: failed to verify x509 cert” 的问题? >因为缺少CA证书。 > >>解决方法:将位于 `$(DESTDIR)/usr/bin` 目录下的华为IT产品证书 `Huawei IT Product CA.pem` 复制到RAS/ATTESTER的运行目录下。 - - ## 可信平台控制模块(TPCM) ### 背景 @@ -1036,7 +1096,7 @@ TPCM可信计算3.0架构为双体系架构,分为防护部件和计算部件 - 可信管理中心:对可信计算节点的防护策略和基准值进行制定、下发、维护、存储等操作的集中管理平台,可信管理中心由第三方厂商提供。 - 防护部件:独立于计算部件执行,为可信计算平台提供具有主动度量和主动控制特征的可信计算防护功能,实现运算的同时进行安全防护。防护部件包括可信平台控制模块、可信软件基,以及可信密码模块(Trusted Cryptography Module,TCM)。TPCM是可信计算节点中实现可信防护功能的关键部件,可以采用多种技术途径实现,如板卡、芯片、IP核等,其内部包含中央处理器、存储器等硬件,固件,以及操作系统与可信功能组件等软件,支撑其作为一个独立于计算部件的防护部件组件,并行于计算部件按内置防护策略工作,对计算部件的硬件、固件及软件等需防护的资源进行可信监控,是可信计算节点中的可信根。 -- 计算部件:主要包括硬件、操作系统和应用层软件。其中操作系统分为引导阶段和运行阶段,在引导阶段openEuler的shim和grub2支持可信度量能力,可实现对shim、grub2以及操作系统内核、initramfs等启动文件的可信度量防护;在运行阶段,openEuler操作系统支持部署可信验证要素代理(由第三方厂商可信华泰提供),它负责将数据发送给TPCM模块,用以实现运行阶段的可信度量防护。 +- 计算部件:主要包括硬件、操作系统和应用层软件。其中操作系统分为引导阶段和运行阶段,在引导阶段openEuler的shim和grub2支持可信度量能力,可实现对shim、grub2以及操作系统内核、initramfs等启动文件的可信度量防护;在运行阶段,openEuler操作系统支持部署可信验证要素代理(由第三方厂商可信华泰提供),它负责将数据发送给TPCM模块,用以实现运行阶段的可信度量防护。 其中,TPCM作为可信计算节点中实现可信防护功能的关键部件,需要与TSB、TCM、可信管理中心和可信计算节点的计算部件交互,交互方式如下: @@ -1048,7 +1108,7 @@ TPCM可信计算3.0架构为双体系架构,分为防护部件和计算部件 ### 约束限制 -适配服务器:TaiShan 200(型号2280)VF
+适配服务器:TaiShan 200(型号2280)VF 适配BMC插卡型号:BC83SMMC ### 应用场景 -- Gitee From 6be95be3a2b283148ffd72e06bca99c06c0c01dd Mon Sep 17 00:00:00 2001 From: Qing_LKYi <597572246@qq.com> Date: Tue, 18 Mar 2025 01:06:17 +0800 Subject: [PATCH 2/2] fix hard tabs --- ...57\344\277\241\350\256\241\347\256\227.md" | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git "a/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" index c422738458..2b5d46c904 100644 --- "a/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" +++ "b/docs/zh/docs/Administration/\345\217\257\344\277\241\350\256\241\347\256\227.md" @@ -825,8 +825,8 @@ $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1 ```go type clientInfo struct { - Registered *bool `json:"registered"` // 目标服务器注册状态 - IsAutoUpdate *bool `json:"isautoupdate"`// 目标服务器基准值更新策略 + Registered *bool `json:"registered"` // 目标服务器注册状态 + IsAutoUpdate *bool `json:"isautoupdate"`// 目标服务器基准值更新策略 } ``` @@ -886,14 +886,14 @@ $ curl -X GET -H "Content-Type: application/json" http://localhost:40002/1/basev ```go type baseValueJson struct { - BaseType string `json:"basetype"` // 基准值类型 - Uuid string `json:"uuid"` // 容器或设备的标识号 - Name string `json:"name"` // 基准值名称 - Enabled bool `json:"enabled"` // 基准值是否可用 - Pcr string `json:"pcr"` // PCR值 - Bios string `json:"bios"` // BIOS值 - Ima string `json:"ima"` // IMA值 - IsNewGroup bool `json:"isnewgroup"` // 是否为一组新的基准值 + BaseType string `json:"basetype"` // 基准值类型 + Uuid string `json:"uuid"` // 容器或设备的标识号 + Name string `json:"name"` // 基准值名称 + Enabled bool `json:"enabled"` // 基准值是否可用 + Pcr string `json:"pcr"` // PCR值 + Bios string `json:"bios"` // BIOS值 + Ima string `json:"ima"` // IMA值 + IsNewGroup bool `json:"isnewgroup"` // 是否为一组新的基准值 } ``` @@ -966,10 +966,10 @@ $ curl -X DELETE -H "Content-type: application/json" -H "Authorization: $AUTHTOK ```go type tabaseValueJson struct { - Uuid string `json:"uuid"` // 用户 TA 的标识号 - Name string `json:"name"` // 基准值名称 - Enabled bool `json:"enabled"` // 基准值是否可用 - Valueinfo string `json:"valueinfo"` // 镜像哈希值和内存哈希值 + Uuid string `json:"uuid"` // 用户 TA 的标识号 + Name string `json:"name"` // 基准值名称 + Enabled bool `json:"enabled"` // 基准值是否可用 + Valueinfo string `json:"valueinfo"` // 镜像哈希值和内存哈希值 } ``` -- Gitee