LoadPin¶
LoadPin 是一个 Linux 安全模块,它确保所有内核加载的文件(模块、固件等)都源自同一个文件系统,并期望该文件系统由只读设备(如 dm-verity 或 CDROM)支持。这使得具有经过验证和/或不可更改的文件系统的系统能够强制执行模块和固件加载限制,而无需单独签署文件。
LSM 在构建时使用 CONFIG_SECURITY_LOADPIN
进行选择,并且可以在启动时使用内核命令行选项 “loadpin.enforce
” 进行控制。默认情况下,它是启用的,但可以在启动时禁用(“loadpin.enforce=0
”)。
LoadPin 在看到加载的第一个文件时开始固定。如果支持文件系统的块设备不是只读的,则会创建一个 sysctl 来切换固定:/proc/sys/kernel/loadpin/enabled
。(拥有可变的文件系统意味着固定也是可变的,但拥有 sysctl 允许在具有可变文件系统的系统上轻松进行测试。)
也可以使用内核命令行选项 “loadpin.exclude
” 从 LoadPin 中排除特定的文件类型。默认情况下,包含所有文件,但可以使用内核命令行选项(例如 “loadpin.exclude=kernel-module,kexec-image
”)将其排除。这允许使用不同的机制(例如 CONFIG_MODULE_SIG
和 CONFIG_KEXEC_VERIFY_SIG
)来验证内核模块和内核映像,同时仍然使用 LoadPin 来保护内核加载的其他文件的完整性。有效文件类型的完整列表可以在 include/linux/kernel_read_file.h
中定义的 kernel_read_file_str
中找到。