1个不稳定版本
使用旧的Rust 2015
0.1.0 | 2017年10月29日 |
---|
#30 in #kernel-module
5KB
modinsert
Linux内核的一个不洁模块加载库。
modinsert
以“替代”方式提供对Linux内核模块的支持。
它利用Linux模块的自动加载机制来欺骗内核调用用户空间中的 modprobe
助手。
由 SIOCGIFINDEX
ioctl的结果产生的副作用会导致内核通过名称查找和加载任意模块。这并不严格算作权限提升,因为调用者必须具有 CAP_SYS_MODULE
权限;然而它允许容器化进程在宿主命名空间中加载模块。
这是一个不洁的机制,因为ioctl系统调用将导致从内核空间到用户空间的上下文切换,以在调用者上下文之外运行宿主二进制文件。
通常这会在宿主中调用 modprobe
,但是可以通过调整 /proc/sys/kernel/modprobe
中的用户模式助手sysctl来运行任意二进制文件。
有关内核模块的更多信息,请参阅 modprobe(7)
。
示例
//! Run this, then check `dmesg` for the effects.
//! It works also in containers, as long as the caller has `CAP_SYS_MODULE`.
extern crate modinsert;
use std::ffi::CString;
fn main() {
let modname = CString::new("rbd");
modinsert::try_load(&modname));
}
更多示例可以在 这里 找到。
许可证
许可协议为以下之一:
- MIT许可证 - https://open-source.org.cn/licenses/MIT
- Apache许可证2.0版 - https://apache.ac.cn/licenses/LICENSE-2.0
任选其一。
依赖
~1.5MB
~37K SLoC