1个不稳定版本

使用旧的Rust 2015

0.1.0 2017年10月29日

#30 in #kernel-module

MIT/Apache

5KB

modinsert

Build Status crates.io LoC Documentation

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));
}

更多示例可以在 这里 找到。

许可证

许可协议为以下之一:

任选其一。

依赖

~1.5MB
~37K SLoC