我编写/调整了一个自定义内核模块并安装了它。
它按预期工作,但我注意到我系统上的其他内核模块是用 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
关于权限:
无需向模块设置可执行位或写入标志。模块文件应该是可读的,仅此而已。insmod
、modinfo
、modprobe
或其他需要读取模块文件的东西。可能需要组或其他人的读取权限才能通过objdump
, nm
, ie调试模块
没有真正的理由为任何人设置模块的可执行位。
关于压缩:
Linux 内核有内置的 XZ 压缩实现。 Linux 内核可以成功读取(之前解压缩)initrd
映像、内核模块甚至本身(内核文件名的vmlinuz
最后一个z
表示内核映像已压缩)。
我不知道你使用什么发行版。但如果您有压缩的内核模块,那么这是您的发行版的规则。当然,与未压缩的模块相比,压缩的模块具有较小的大小,但是如果内核模块是在没有调试符号的情况下编译的,则压缩和未压缩的内核模块之间的大小差异将会很小。另一方面,考虑到不需要大量模块,最好使用压缩并为其他东西节省空间,而不是仅将其用于存储大量模块。