回应用户Benjamin Peter的答案中提到的以下内容:
我也听说必须禁用安全启动。
使用AlmaLinux 8.7和4.18.0-425.3.1.el8.x86_64
内核时,即使启用了安全启动,也能够读取MSR。
read_smi_count.c是测试程序的代码。成功运行它以读取MSR_SMI_COUNT(0x34)寄存器。在构建程序后,以下是输出,提示需要执行什么操作才能让用户程序访问读取MSR寄存器:
[mr_halfword@skylake-alma release]$ read_smi_count/read_smi_count
Error: No permission to open /dev/cpu/0/msr. Try:
sudo chmod o+r /dev/cpu/0/msr
[mr_halfword@skylake-alma release]$ sudo chmod o+r /dev/cpu/0/msr
[sudo] password for mr_halfword:
[mr_halfword@skylake-alma release]$ read_smi_count/read_smi_count
Error: No permission to open /dev/cpu/0/msr. Try:
sudo setcap cap_sys_rawio=ep read_smi_count/read_smi_count
[mr_halfword@skylake-alma release]$ sudo setcap cap_sys_rawio=ep read_smi_count/read_smi_count
[mr_halfword@skylake-alma release]$ read_smi_count/read_smi_count
SMI COUNT = 15240
dmesg
的输出确认了由于启用了 EFI 安全启动,内核已被锁定:
mr_halfword@skylake-alma release]$ dmesg|grep lockdown
[ 0.000000] Kernel is locked down from EFI secure boot
[ 1.578247] Lockdown: swapper/0: Hibernation is restricted
[ 37.750117] Lockdown: x86_energy_perf: Direct MSR access is restricted
锁定模式为完整性:
[mr_halfword@skylake-alma release]$ cat /sys/kernel/security/lockdown
none [integrity]
上述输出未显示机密锁定模式选项。尚未调查机密模式是否会防止读取MSR寄存器。
Linux内核锁定、完整性和机密性指出,机密模式应用了额外的限制,以防止从内核中读取秘密。