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_SIGCONFIG_KEXEC_VERIFY_SIG来验证内核模块和内核映像,同时仍然使用LoadPin来保护内核加载的其他文件的完整性。有效文件类型的完整列表可以在include/linux/kernel_read_file.h中定义的kernel_read_file_str中找到。