内核模块:设置可执行位?用xz压缩?

内核模块:设置可执行位?用xz压缩?

我编写/调整了一个自定义内核模块并安装了它。

它按预期工作,但我注意到我系统上的其他内核模块是用 xz 压缩的并具有 0444 权限,而我没有压缩我的模块,而是使用可执行位集(0555 权限)安装了它。

$ stat --format=%A /path/to/my-module.ko
-r-xr-xr-x

$ stat --format=%A /path/to/other-module.ko.xz
-r--r--r--

这是否有任何影响——性能、安全性或其他方面?我计划压缩我的模块并设置权限以匹配其他模块正在使用的内容,但我不知道他们正在使用的压缩和权限的根本动机。

答案1

关于权限:

无需向模块设置可执行位或写入标志。模块文件应该是可读的,仅此而已。insmodmodinfomodprobe或其他需要读取模块文件的东西。可能需要组或其他人的读取权限才能通过objdump, nm, ie调试模块

没有真正的理由为任何人设置模块的可执行位。

关于压缩:

Linux 内核有内置的 XZ 压缩实现。 Linux 内核可以成功读取(之前解压缩)initrd映像、内核模块甚至本身(内核文件名的vmlinuz最后一个z表示内核映像已压缩)。

我不知道你使用什么发行版。但如果您有压缩的内核模块,那么这是您的发行版的规则。当然,与未压缩的模块相比,压缩的模块具有较小的大小,但是如果内核模块是在没有调试符号的情况下编译的,则压缩和未压缩的内核模块之间的大小差异将会很小。另一方面,考虑到不需要大量模块,最好使用压缩并为其他东西节省空间,而不是仅将其用于存储大量模块。

相关内容