Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
8.5. 启用完整性测量架构和扩展验证模块
完整性测量架构(IMA)和扩展验证模块(EVM)是内核完整性子系统的组成部分,以各种方式增强系统安全性。配置 IMA 和 EVM 可让您签署文件,从而增强系统的安全性。
先决条件
-
The
ima-evm-utils
和keyutils
软件包安装在您的系统上。 -
securityfs
文件系统挂载到/sys/kernel/security/
目录。 存在
/sys/kernel/security/ima/
目录。# mount … securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) …
流程
准备您的系统以启用 IMA 和 EVM:
添加以下内核命令行参数:
# grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="ima_appraise=fix ima_appraise_tcb evm=fix"
命令在 fix 模式中为当前引导条目启用 IMA 和 EVM,并允许用户收集和更新 IMA 测量。
The
ima_appraise_tcb
内核命令行参数确保内核使用默认的可信计算基础(TCB)测量策略和实例步骤。强制禁止访问之前和当前测量结果不匹配的文件。- 重启以使更改生效。
(可选)验证内核命令行是否包含新参数:
# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.10.0-1136.el7.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet LANG=en_US.UTF-8 ima_appraise=fix ima_appraise_tcb evm=fix
为 EVM 创建并设置公共和私有密钥对:
为 EVM 创建新密钥环:
# evm_kr_id=$(keyctl newring _evm @u)
命令创建
_evm
密钥环,并将它连接到@u
系统用户密钥环。然后,_evm
的密钥环 ID 分配给evm_kr_id
变量,以便更轻松地处理。另外,还可查看新创建的密钥环:
# keyctl show Session Keyring 1025767139 --alswrv 0 0 keyring: _ses 548660789 --alswrv 0 65534 \_ keyring: _uid.0 456142548 --alswrv 0 0 \_ keyring: _evm
为密钥创建一个目录:
# mkdir -p /etc/keys/
在
/etc/keys/privkey.pem
文件中生成 1024 位 RSA 私钥:# openssl genrsa -out /etc/keys/privkey.pem 1024 Generating RSA private key, 1024 bit long modulus .......++++++ ...++++++ e is 65537 (0x10001)
使用之前创建的
/etc/keys/privkey.pem
私钥,将对应的 RSA 公钥派生到/etc/keys/pubkey.pem
文件中:# openssl rsa -pubout -in /etc/keys/privkey.pem -out /etc/keys/pubkey.pem writing RSA key
将公钥导入到专用的 EVM 密钥环中:
# evmctl import --rsa /etc/keys/pubkey.pem $evm_kr_id 1054989579
命令将
/etc/keys/pubkey.pem
公钥导入到_evm
密钥环中。然后,_evm
密钥环附加到内核密钥环。密钥序列号位于上例的第二行。另外,还可查看新导入的密钥:
# keyctl show Session Keyring 1025767139 --alswrv 0 0 keyring: _ses 548660789 --alswrv 0 65534 \_ keyring: _uid.0 456142548 --alswrv 0 0 \_ keyring: _evm 1054989579 --alswrv 0 0 \_ user: FA0EF80BF06F80AC
注意此非对称密钥对可用于使用
evmctl 符号
命令以数字方式签署文件的扩展属性的内容。扩展属性稍后由内核验证。创建一个内核主密钥来保护 EVM 密钥:
# dd if=/dev/urandom bs=1 count=32 2>/dev/null | keyctl padd user kmk-user @u
内核主密钥(
kmk
)完全保留在内核空间内存中。内核主密钥kmk
的 32 字节长值是从/dev/urandom
文件中随机字节生成的,并放置在用户(@u
)密钥环中。
根据
kmk
密钥创建一个加密的 EVM 密钥:# keyctl add encrypted evm-key "new user:kmk 64" @u 351426499
命令使用
kmk
生成并加密 64 字节用户密钥(名为evm-key
)并将其放置在用户(@u
)密钥环中。密钥序列号位于上例的第二行。重要必须为用户密钥 evm-key 命名,因为这是 EVM 子系统预期并可使用的名称。
激活 EVM:
# echo 1 > /sys/kernel/security/evm
验证 EVM 是否已初始化:
dmesg | tail -1 […] EVM: initialized