文件完整性保护

内核完整性度量架构(IMA)

IMA全称Integrity Measurement Architecture,是Linux内核提供的强制访问控制子系统,通过在文件访问系统调用添加检查hook,实现文件的完整性度量/校验。

前置条件

  1. 准备openEuler内核编译环境,可参考:https://gitee.com/openeuler/kernel/wikis/kernel;
  2. 内核模块签名支持商密算法在openEuler 5.10内核支持,建议选取最新5.10内核源码进行编译;
  3. 生成内核SM2根证书:
# 生成证书配置文件(配置文件其他字段可按需定义)
$ echo 'subjectKeyIdentifier=hash' > ca.cfg
# 生成SM2签名私钥
$ openssl ecparam -genkey -name SM2 -out ca.key
# 生成签名请求
$ openssl req -new -sm3 -key ca.key -out ca.csr
# 生成SM2证书
$ openssl x509 -req -days 3650 -extfile ca.cfg -signkey ca.key -in ca.csr -out ca.crt
  1. 生成IMA二级证书:
# 创建证书配置文件
echo 'subjectKeyIdentifier=hash' > ima.cfg
echo 'authorityKeyIdentifier=keyid,issuer' >> ima.cfg
# 生成私钥
openssl ecparam -genkey -name SM2 -out ima.key
# 生成签名请求
openssl req -new -sm3 -key ima.key -out ima.csr
# 基于一级证书生成二级证书
openssl x509 -req -sm3 -CAcreateserial -CA ca.crt -CAkey ca.key -extfile ima.cfg -in ima.csr -out ima.crt
# 转换为DER格式
openssl x509 -outform DER -in ima.crt -out x509_ima.der
  1. 将根证书放置到内核源码目录,并修改内核编译选项CONFIG_SYSTEM_TRUSTED_KEYS,将制定证书编译到内核TRUSTED密钥中:
$ cp /path/to/ca.crt .
$ make openeuler_defconfig
$ cat .config | grep CONFIG_SYSTEM_TRUSTED_KEYS
CONFIG_SYSTEM_TRUSTED_KEYS="ca.crt"
  1. 编译并安装内核:
$ make -j64
$ make modules_install
$ make install

如何使用

场景1:原生IMA

IMA度量模式

启动参数配置IMA策略和摘要算法,关闭IMA评估模式,重启系统:

ima_policy=tcb ima_hash=sm3 ima_appraise=off

检查度量日志,可以发现IMA对于所有目标保护文件都进行了度量,且摘要算法为SM3:

cat /sys/kernel/security/ima/ascii_runtime_measurements
10 601989730f01fb4688bba92d0ec94340cd90757f ima-sig sm3:0000000000000000000000000000000000000000000000000000000000000000 boot_aggregate 
10 dc0a98316b03ab15edd2b8daae75a0d64bca7c56 ima-sig sm3:3c62ee3c13ee32d7a287e04c843c03ebb428a5bb3dd83561efffe9b08444be22 /usr/lib/systemd/systemd 
10 1d0a5140e3924e2542963ad887a80def0aa8acac ima-sig sm3:4d3b83e143bd9d5288ef099eff4d01444947516d680165c6dd08cd5900768032 /usr/lib64/ld-linux-x86-64.so.2
......
IMA评估模式(hash)

启动参数配置IMA策略和摘要算法,开启IMA评估fix模式,重启系统:

ima_policy=appraise_tcb ima_hash=sm3 ima_appraise=fix

appraise_tcb代表对所有 root 属主的文件进行评估。

对所有需要评估的文件进行一次open操作,以自动标记ima扩展属性:

find / -fstype ext4 -type f -uid 0 -exec dd if='{}' of=/dev/null count=0 status=none \;

完成标记后,可以看到所有的文件都标记了SM3摘要算法的ima扩展属性:

getfattr -m - -d -e hex /bin/bash
getfattr: Removing leading '/' from absolute path names
# file: bin/bash
security.ima=0x0411a794922bb9f0a034257f6c7090a3e8429801a42d422c21f1473e83b7f7eac385
security.selinux=0x73797374656d5f753a6f626a6563745f723a7368656c6c5f657865635f743a733000

openssl dgst -sm3 /bin/bash
SM3(/bin/bash)= a794922bb9f0a034257f6c7090a3e8429801a42d422c21f1473e83b7f7eac385

开启enforce模式后重启,系统可正常运行:

ima_policy=appraise_tcb ima_hash=sm3 ima_appraise=enforce
IMA评估模式(签名)

前置条件:

  1. 内核预置商密根证书;
  2. 安装ima-evm-utils软件包,且大于或等于指定版本:
$ rpm -qa ima-evm-utils
ima-evm-utils-1.3.2-4.oe2209.x86_64

生成IMA二级证书:

# 创建证书配置文件
echo 'subjectKeyIdentifier=hash' > ima.cfg
echo 'authorityKeyIdentifier=keyid,issuer' >> ima.cfg
# 生成私钥
openssl ecparam -genkey -name SM2 -out ima.key
# 生成签名请求
openssl req -new -sm3 -key ima.key -out ima.csr
# 基于一级证书生成二级证书
openssl x509 -req -sm3 -CAcreateserial -CA ca.crt -CAkey ca.key -extfile ima.cfg -in ima.csr -out ima.crt
# 转换为DER格式
openssl x509 -outform DER -in ima.crt -out x509_ima.der

将IMA证书放置在/etc/keys目录下,执行dracut重新制作initrd:

mkdir -p /etc/keys
cp x509_ima.der /etc/keys
echo 'install_items+=" /etc/keys/x509_ima.der "' >> /etc/dracut.conf
dracut -f

对需要进行保护的文件执行签名操作,如此处对/usr/bin目录下所有root用户的可执行文件进行签名:

find /usr/bin -fstype ext4 -type f -executable -uid 0 -exec evmctl -a sm3 ima_sign --key /path/to/ima.key '{}' \;

开启enforce模式后重启,系统可正常运行:

ima_policy=appraise_tcb ima_hash=sm3 ima_appraise=enforce

检查签名模式的保护效果:

# getfattr -m - -d /bin/echo
getfattr: Removing leading '/' from absolute path names
# file: bin/echo
security.ima=0sAwIRNJFkBQBIMEYCIQDLBg/bYlrkBqSaXNQMyK7rhiZj+qRiKdu+0fqW8lSmPQIhAJY2qSZJ0HgSu7kygydrS4MCC0KTK59nUkvISenZAUCo
security.selinux="system_u:object_r:bin_t:s0"

# echo 123 >> /bin/echo
-bash: /bin/echo: Permission denied

注意事项:

对于每一个在IMA防护范围内的文件,都需要选择使用hash模式和签名模式其中之一的方法标记完整性信息。一般情况下,对于可能发生变化的文件(如数据文件、配置文件等)采用hash模式标记,对于不会发生变化的文件(如可执行文件、动态链接库等)采用签名模式标记。

场景2:IMA摘要列表模式

生成SM3摘要列表

gen_digest_lists支持-a sm3参数,支持生成SM3摘要列表:

gen_digest_lists -a sm3 -t metadata -f compact -i l:policy -o add -p -1 -m immutable -i I:/usr/bin/bash -d <output_dir> -i i:
gen_digest_lists -a sm3 -t metadata -f compact -i l:policy -o add -p -1 -m immutable -i I:/usr/bin/bash -d <output_dir> -i i: -T
配置SM3摘要算法

整体步骤与开启IMA摘要列表特性相同,唯一区别在于将ima_hash启动参数配置为SM3。启动参数参考配置如下:

# log模式
ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sm3 ima_appraise=log evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest
# enforce模式
ima_template=ima-sig ima_policy="exec_tcb|appraise_exec_tcb|appraise_exec_immutable" initramtmpfs ima_hash=sm3 ima_appraise=enforce-evm evm=allow_metadata_writes evm=x509 ima_digest_list_pcr=11 ima_appraise_digest_list=digest

其余步骤可参考 管理员指南->可信计算->摘要列表场景->初次部署 章节。

配置完成后重启系统,通过查询度量日志可以看到,度量日志中的默认算法已变成SM3:

cat /sys/kernel/security/ima/ascii_runtime_measurements
......
11 9e32183b5b1da72c6ff4298a44026e3f9af510c9 ima-sig sm3:5a2d81cd135f41e73e0224b9a81c3d8608ccde8caeafd5113de959ceb7c84948 /usr/bin/upload_digest_lists 
11 f3b9264761dbaeaf637d08b86cc3655e8f3380f7 ima-sig sm3:cc6faecee9976c12279dab1627a78ef36f6998c65779f3b846494ac5fe5493a1 /usr/libexec/rpm_parser 
11 dc0a98316b03ab15edd2b8daae75a0d64bca7c56 ima-sig sm3:3c62ee3c13ee32d7a287e04c843c03ebb428a5bb3dd83561efffe9b08444be22 /usr/lib/systemd/systemd 
......
配置SM2证书校验摘要列表

前置条件:

  1. 内核预置商密根证书;
  2. 安装digest-list-tools和ima-evm-utils软件包,且大于或等于指定版本:
$ rpm -qa ima-evm-utils
ima-evm-utils-1.3.2-4.oe2209.x86_64
$ rpm -qa digest-list-tools
digest-list-tools-0.3.95-10.oe2209.x86_64

执行步骤

  1. 生成IMA/EVM二级证书(需要为内核预置的商密根证书的子证书):
# 创建证书配置文件
echo 'subjectKeyIdentifier=hash' > ima.cfg
echo 'authorityKeyIdentifier=keyid,issuer' >> ima.cfg
# 生成私钥
openssl ecparam -genkey -name SM2 -out ima.key
# 生成签名请求
openssl req -new -sm3 -key ima.key -out ima.csr
# 基于一级证书生成二级证书
openssl x509 -req -sm3 -CAcreateserial -CA ca.crt -CAkey ca.key -extfile ima.cfg -in ima.csr -out ima.crt
# 转换为DER格式
openssl x509 -outform DER -in ima.crt -out x509_ima.der
openssl x509 -outform DER -in ima.crt -out x509_evm.der
  1. 将IMA/EVM证书放置在/etc/keys目录下,执行dracut重新制作initrd:
mkdir -p /etc/keys
cp x509_ima.der /etc/keys
cp x509_evm.der /etc/keys
echo 'install_items+=" /etc/keys/x509_ima.der /etc/keys/x509_evm.der "' >> /etc/dracut.conf
dracut -f -e xattr
  1. 配置启动参数,开启IMA摘要列表功能,重启后可以检查证书被导入IMA/EVM密钥环:
cat /proc/keys
......
024dee5e I------     1 perm 1f0f0000     0     0 keyring   .evm: 1
......
3980807f I------     1 perm 1f0f0000     0     0 keyring   .ima: 1
......
  1. 将IMA摘要列表使用IMA/EVM证书对应的私钥进行签名,签名后可被正常导入内核:
# 使用evmctl对摘要列表进行签名
evmctl ima_sign  --key /path/to/ima.key -a sm3 0-metadata_list-compact-tree-1.8.0-2.oe2209.x86_64
# 检查签名后的扩展属性
getfattr -m - -d 0-metadata_list-compact-tree-1.8.0-2.oe2209.x86_64 
# file: 0-metadata_list-compact-tree-1.8.0-2.oe2209.x86_64
security.ima=0sAwIRNJFkBQBHMEUCIQCzdKVWdxw1hoVm9lgZB6sl+sxapptUFNjqHt5XZD87hgIgBMuZqBdrcNm7fXq/reQw7rzY/RN/UXPrIOxrVvpTouw=
security.selinux="unconfined_u:object_r:admin_home_t:s0"
# 将签名后的摘要列表文件导入内核
echo /root/tree/etc/ima/digest_lists/0-metadata_list-compact-tree-1.8.0-2.oe2209.x86_64 > /sys/kernel/security/ima/digest_list_data
# 检查度量日志,可以看到摘要列表的导入记录
cat /sys/kernel/security/ima/ascii_runtime_measurements
11 43b6981f84ba2725d05e91f19577cedb004adffb ima-sig sm3:b9430bbde2b7f30e935d91e29ab6778b6a825a2c3e5e7255895effb8747b7c1a /root/tree/etc/ima/digest_lists/0-metadata_list-compact-tree-1.8.0-2.oe2209.x86_64 0302113491640500473045022100b374a556771c35868566f6581907ab25facc5aa69b5414d8ea1ede57643f3b86022004cb99a8176b70d9bb7d7abfade430eebcd8fd137f5173eb20ec6b56fa53a2ec

注意:

  1. openEuler默认提供的摘要列表中使用的哈希算法为SHA256。当IMA摘要列表度量算法配置为SM3算法时,必须将/etc/ima/digest_lists目录下的摘要列表移除,然后重新生成并签名,否则会导致文件完整性校验错误。参考步骤如下:
# 重置磁盘SELinux标签(开启IMA扩展属性校验,并开启SELinux时执行)
fixfiles -F restore
# 为所有文件生成摘要列表(也可自行设置生成范围)
gen_digest_lists -a sm3 -t metadata -f compact -i l:policy -o add -p -1 -m immutable -i I:/ -d /etc/ima/digest_lists -i i:
# 修改生成的摘要列表文件名(可选)
mv /etc/ima/digest_lists/0-metadata_list-compact- /etc/ima/digest_lists/0-metadata_list-compact-everything-sm3
# 签名
evmctl ima_sign --key /path/to/ima.key -a sm3 /etc/ima/digest_lists/0-metadata_list-compact-everything-sm3
# 重新制作initrd
dracut -f -e xattr
  1. 对于openEuler发布的软件包,会默认提供IMA摘要列表文件。由于默认提供的摘要算法为sha256,因此当摘要算法切换为SM3时,会导致openEuler发布的摘要列表无法被导入,在软件包安装过程中可能出现提示信息:
Cannon parse /etc/ima/digest_lists/0-metadata_list-rpm-......

轻量入侵检测(AIDE)

AIDE是一款轻量级的入侵检测工具,主要通过检测文件的完整性,以及时发现针对系统的恶意入侵行为。AIDE数据库能够使用sha256、sha512等哈希算法,用密文形式建立每个文件的校验码或散列号。openEuler提供的AIDE在开源软件的基础上新增了对SM3算法的支持。

前置条件

AIDE大于或等于0.17.4-1版本:

$ rpm -qa aide
aide-0.17.4-1.oe2209.x86_64

如何使用

修改/etc/aide.conf配置文件,添加SM3算法支持:

......
FIPSR = p+i+n+u+g+s+m+c+acl+selinux+xattrs+sha256+sm3
......
DATAONLY =  p+n+u+g+s+acl+selinux+xattrs+sha256+sm3
......
  1. 初始化数据库,并保存数据库作为基准:

初始化数据库

$ aide -c /etc/aide.conf -i

示例输出如下:

AIDE initialized database at /var/lib/aide/aide.db.new.gz

Number of entries:      64249

---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------

/var/lib/aide/aide.db.new.gz
 MD5       : a7y5ErdpBAezV2iGdaVleg==
 SHA1      : u7W7jxomFtZn8rwMlkIRCN0r7iQ=
 SHA256    : 88Kw5b2yJ9bejwO+NqT6lyAieno+K0+W
             BPVBjXcUl08=
 SHA512    : WyOIgRxk9SeSoktF6BYVV0tRL7nGNDKQ
             A9QyxVCgzg+PwPMV7tzxmwOZI/dB64pP
             vQ/D2jqJdf3NS2PHMI4yvg==
 RMD160    : qTEPs2SIxPm3iEwsCnwvp9hR4s4=
 TIGER     : 0HgLucmhCcB56bxOMj+j1Kuja8UIsFRg
 CRC32     : VKE1TA==
 WHIRLPOOL : JSA35/NmkMOkUWEpcZJf3PR1UUz5WcLG
             AmBKPkao3fzQUsLMTJizCV4CwAE0G/Yc
             KX0mpW5vx+gk3njya8rAvA==
 GOST      : yKjiytOwRr3bJcFsxnJ310t1FY6YE3HB
             YNT8XP93xpc=
 STRIBOG256: 9bzS+5j4ZAoU/P7v3tkKOWn4ZfggcX28
             9dLQVhaiJtQ=
 STRIBOG512: 9LLXgqsRIRiXP2WOrOJt1qhx6psfbACd
             un+GTVmu441quX4zaaPIIG9lzDMBAqMg
             hZx5DlxsQj3YjMezSUsXLg==
 SM3       : Vwii+uw3Ge5Hh3eo1KOombxn2jWgyYRX
             ZdyCRZqWZ/E=


End timestamp: 2022-08-12 09:01:25 +0800 (run time: 2m 43s)

保存数据库作为基准:

$ mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

场景1:检测被保护文件变化

$ aide -c /etc/aide.conf --check
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------

File: /boot/config-5.10.0-106.3.0.57.oe2209.aarch64
 Size      : 182936                           | 182938
 Mtime     : 2022-08-04 08:00:00 +0800        | 2022-08-12 09:05:34 +0800
 Ctime     : 2022-08-11 01:42:44 +0800        | 2022-08-12 09:05:34 +0800
 SHA256    : ae0fOzf7U+e/evTZKpk6JQa00kvSkc5J | gOlhcUgnZWhcyJYMEPxCYccXwFr9lERX
             vMTX5Ysh+1k=                     | KK3O/ytfR/g=
 SHA512    : zAPIxIAM7YvJPjwl/PH23leBb/HiO0Rf | p+WxVOZ6DX323rHDRF864w297yh7POk6
             PlRME7yvpzFZk/5BrNe2ofQWR/0sFu1m | 11dOzahlKTWpAKaexC/u+4REiCzjl1rm
             JsDSy8m57wzCpJA9iUFq1g==         | eb/kd3Xgp1LoKwn49mtqxw==
 SM3       : CW0GnITxNeGeYOCAm4xfu78Vqm+wLp/Z | GWq/3nXL16tMYyxyFD/HTZbvJi2h+ttg
             cOmXmIKJT4Q=                     | 6d8XmSHu26A=

场景2:更新数据库

执行以下命令进行数据库更新,更新后数据库文件为 /var/lib/aide/aide.db.new.gz:

$ aide -c /etc/aide.conf --update
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------

File: /boot/config-5.10.0-106.3.0.57.oe2209.aarch64
 Size      : 182936                           | 182938
 Mtime     : 2022-08-04 08:00:00 +0800        | 2022-08-12 09:05:34 +0800
 Ctime     : 2022-08-11 01:42:44 +0800        | 2022-08-12 09:05:34 +0800
 SHA256    : ae0fOzf7U+e/evTZKpk6JQa00kvSkc5J | gOlhcUgnZWhcyJYMEPxCYccXwFr9lERX
             vMTX5Ysh+1k=                     | KK3O/ytfR/g=
 SHA512    : zAPIxIAM7YvJPjwl/PH23leBb/HiO0Rf | p+WxVOZ6DX323rHDRF864w297yh7POk6
             PlRME7yvpzFZk/5BrNe2ofQWR/0sFu1m | 11dOzahlKTWpAKaexC/u+4REiCzjl1rm
             JsDSy8m57wzCpJA9iUFq1g==         | eb/kd3Xgp1LoKwn49mtqxw==
 SM3       : CW0GnITxNeGeYOCAm4xfu78Vqm+wLp/Z | GWq/3nXL16tMYyxyFD/HTZbvJi2h+ttg
             cOmXmIKJT4Q=                     | 6d8XmSHu26A=

场景3:比较数据库

在/etc/aide.conf中配置两个数据库:

# The location of the database to be read.
database_in=file:@@{DBDIR}/aide.db.gz
database_new=file:@@{DBDIR}/aide.db.new.gz

执行以下命令进行数据库比较:

$ aide -c /etc/aide.conf --compare
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------

File: /boot/config-5.10.0-106.3.0.57.oe2209.aarch64
 Size      : 182936                           | 182938
 Mtime     : 2022-08-04 08:00:00 +0800        | 2022-08-12 09:05:34 +0800
 Ctime     : 2022-08-11 01:42:44 +0800        | 2022-08-12 09:05:34 +0800
 SHA256    : ae0fOzf7U+e/evTZKpk6JQa00kvSkc5J | gOlhcUgnZWhcyJYMEPxCYccXwFr9lERX
             vMTX5Ysh+1k=                     | KK3O/ytfR/g=
 SHA512    : zAPIxIAM7YvJPjwl/PH23leBb/HiO0Rf | p+WxVOZ6DX323rHDRF864w297yh7POk6
             PlRME7yvpzFZk/5BrNe2ofQWR/0sFu1m | 11dOzahlKTWpAKaexC/u+4REiCzjl1rm
             JsDSy8m57wzCpJA9iUFq1g==         | eb/kd3Xgp1LoKwn49mtqxw==
 SM3       : CW0GnITxNeGeYOCAm4xfu78Vqm+wLp/Z | GWq/3nXL16tMYyxyFD/HTZbvJi2h+ttg
             cOmXmIKJT4Q=                     | 6d8XmSHu26A=

---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------

/var/lib/aide/aide.db.gz
 MD5       : a7y5ErdpBAezV2iGdaVleg==
 SHA1      : u7W7jxomFtZn8rwMlkIRCN0r7iQ=
 SHA256    : 88Kw5b2yJ9bejwO+NqT6lyAieno+K0+W
             BPVBjXcUl08=
 SHA512    : WyOIgRxk9SeSoktF6BYVV0tRL7nGNDKQ
             A9QyxVCgzg+PwPMV7tzxmwOZI/dB64pP
             vQ/D2jqJdf3NS2PHMI4yvg==
 RMD160    : qTEPs2SIxPm3iEwsCnwvp9hR4s4=
 TIGER     : 0HgLucmhCcB56bxOMj+j1Kuja8UIsFRg
 CRC32     : VKE1TA==
 WHIRLPOOL : JSA35/NmkMOkUWEpcZJf3PR1UUz5WcLG
             AmBKPkao3fzQUsLMTJizCV4CwAE0G/Yc
             KX0mpW5vx+gk3njya8rAvA==
 GOST      : yKjiytOwRr3bJcFsxnJ310t1FY6YE3HB
             YNT8XP93xpc=
 STRIBOG256: 9bzS+5j4ZAoU/P7v3tkKOWn4ZfggcX28
             9dLQVhaiJtQ=
 STRIBOG512: 9LLXgqsRIRiXP2WOrOJt1qhx6psfbACd
             un+GTVmu441quX4zaaPIIG9lzDMBAqMg
             hZx5DlxsQj3YjMezSUsXLg==
 SM3       : Vwii+uw3Ge5Hh3eo1KOombxn2jWgyYRX
             ZdyCRZqWZ/E=

/var/lib/aide/aide.db.new.gz
 MD5       : sKt4dVDKY/8A9EY/X4Ue2A==
 SHA1      : hagLXMv7G+KbEKh861kjjFSYpRw=
 SHA256    : HTHF7k5U294ECjCLneoZ3o8bH6PYgY5u
             AzoIyCacZp4=
 SHA512    : 5gWi7K/ztWMl7H+PK1doV/tWDHmaE2m/
             ndRXGR7b5J3v82Jv2HeJPoOt5A4Z/9FH
             5H+uCLYaHwRleyalyy5Wew==
 RMD160    : uMM1HtAbfz+G3Y9Z+rVR4qjdqcQ=
 TIGER     : OTHdXNQOxnHnOl6C9M3czSC42+SeZAZA
 CRC32     : T9G1Tw==
 WHIRLPOOL : FRMnQ2wHgylsTmpKE8RwdUvkzXucHwu1
             W9ZkUrxoXeci2g7jIgoMmpoeDPhH73qz
             nZ7fKj1lStSpiUGD5KPeWA==
 GOST      : haeO5dhT+t34C1GJf+2dc3q1GMN71FqB
             kqoiODo+j2o=
 STRIBOG256: lgZUZhhd9JfMOXgNzYptapqagwgmvdM+
             7uWzJsmOxoY=
 STRIBOG512: PA6jksprS37xQzHm1ZIvLR9ROa+FxoiF
             /xbAe0pSi4lMXXzABrPKkjyK0WtjxFvx
             07Poj2iDwNNcUJWekbaEXA==
 SM3       : R5/HXng5MNvrjoCh8/JzrWle1IO8ggsR
             P5i2ePX5BpY=

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。