9个版本
0.3.0 | 2022年10月1日 |
---|---|
0.2.3 | 2022年2月14日 |
0.2.2 | 2022年1月1日 |
0.2.1 | 2021年12月31日 |
0.1.1 | 2021年4月20日 |
104 在 操作系统 类别中
每月 25,908 次下载
在 17 个 包中(直接使用11个)
275KB
6.5K SLoC
libseccomp-rs
Rust语言对libseccomp库的绑定
libseccomp库提供了一个易于使用、平台无关的接口,用于访问Linux内核的syscall过滤机制。libseccomp API旨在抽象底层基于BPF的syscall过滤语言,并呈现一个更传统的基于函数调用的过滤接口,该接口应该对应用程序开发者熟悉且易于采用。
libseccomp-rs提供了对libseccomp库的Rust接口。该仓库包含libseccomp和libseccomp-sys包,使开发人员能够在Rust中使用libseccomp API。
- libseccomp:高级安全API
- libseccomp-sys:低级不安全API
示例
创建和加载单个seccomp规则
use libseccomp::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Creates and returns a new filter context.
let mut filter = ScmpFilterContext::new_filter(ScmpAction::Allow)?;
// Adds an architecture to the filter.
filter.add_arch(ScmpArch::X8664)?;
// Returns the number of a syscall by name.
let syscall = ScmpSyscall::from_name("dup3")?;
// Adds a single rule for an unconditional action on the syscall.
filter.add_rule(ScmpAction::Errno(10), syscall)?;
// Loads the filter context into the kernel.
filter.load()?;
// The dup3 fails by the seccomp rule.
assert_eq!(
unsafe { libc::dup3(0, 100, libc::O_CLOEXEC) } as i32,
-libc::EPERM
);
assert_eq!(std::io::Error::last_os_error().raw_os_error().unwrap(), 10);
Ok(())
}
要求
在使用libseccomp包之前,您需要为您的系统安装libseccomp库。需要libseccomp库版本2.4或更高版本。
从软件包中安装libseccomp库
例如,基于Debian的Linux
$ sudo apt install libseccomp-dev
从源代码构建和安装libseccomp库
如果您想从官方发布tarball构建libseccomp库而不是使用软件包,请遵循以下快速步骤。
$ LIBSECCOMP_VERSION=2.5.3
$ wget https://github.com/seccomp/libseccomp/releases/download/v${LIBSECCOMP_VERSION}/libseccomp-${LIBSECCOMP_VERSION}.tar.gz
$ tar xvf libseccomp-${LIBSECCOMP_VERSION}.tar.gz
$ cd libseccomp-${LIBSECCOMP_VERSION}
$ ./configure
$ make
$ sudo make install
有关更多详细信息,请参阅libseccomp库仓库。
设置
如果您使用动态链接的libseccomp库与libseccomp包,则无需额外的设置。
但是,如果您想使用libseccomp包针对musl-libc和静态链接的libseccomp库,您必须设置环境变量LIBSECCOMP_LINK_TYPE
和LIBSECCOMP_LIB_PATH
,如下所示。
$ export LIBSECCOMP_LINK_TYPE=static
$ export LIBSECCOMP_LIB_PATH="the path of the directory containing libseccomp.a (e.g. /usr/lib)"
注意:要针对musl-libc构建libseccomp包,您需要手动为musl-libc构建libseccomp库,或者使用提供静态链接libseccomp库包的基于musl的发行版
现在,将以下内容添加到您的Cargo.toml
中以开始构建libseccomp包。
[dependencies]
libseccomp = "0.3.0"
测试包
libseccomp crate 提供了多个单元测试。如果您想运行标准的回归测试,可以执行以下命令。
$ make test
如何贡献
任何人都可以加入并贡献代码、文档和用例。
有关如何为 libseccomp-rs 项目做出贡献的详细信息,请参阅贡献文档。
许可证
本 crate 受以下许可证约束
- MIT 许可证(见 LICENSE-MIT);或者
- Apache 2.0 许可证(见 LICENSE-APACHE),
任选其一。
除非您明确声明,否则您提交给 libseccomp-rs 的任何有意贡献,根据 Apache-2.0 许可证的定义,应以上述方式双重许可,不附加任何额外条款或条件。
依赖项
~155KB