13 个版本

0.2.0 2021 年 9 月 25 日
0.1.1 2019 年 10 月 19 日
0.1.0 2019 年 6 月 6 日
0.0.6 2018 年 12 月 25 日
0.0.1 2018 年 5 月 28 日

#535Unix API

每月 25 次下载
3 crates 中使用

BSD-3-Clause

84KB
1.5K SLoC

libjail-rs

Crates.io GitHub last commit Gitter Libraries.io for releases Crates.io Crates.io BuildBot Travis Docs: x86_64-unknown-freebsd Docs: i686-unknown-freebsd FOSSA Status

libjail-rs 致力于成为 FreeBSD jail(3) 库的 Rust 实现。虽然功能一致性是一个目标,但并不一定是 jail(3) 中所有函数的一对一实现。

这好吗?

是的。

我能用吗?

这个库仍在积极开发中,但到目前为止似乎工作正常。没有稳定性保证。

我该如何使用它?

jail = "*"

在监狱中执行命令

use jail::process::Jailed;
use jail::StoppedJail;
use std::process::Command;

fn main() {
    let stopped = StoppedJail::new("/path/to/root")
        .name("alcatraz")
        .ip("127.0.1.2".parse().unwrap())
        .ip("fe80::2".parse().unwrap * ())
        .param("allow.raw_sockets", param::Value::Int(1));

    let running = stopped.start().expect("Couldn't start Jail");

    let output = Command::new("hostname")
        .jail(&running)
        .output()
        .expect("Failed to execute command");

    println!("output: {:?}", output.stdout);

    running.kill();
}

它快吗?

包含了一些基准测试。使用 sudo cargo bench 运行它们(是的,启动监狱需要是 root)。

以下是我笔记本电脑上的一些结果,在慢速旋转磁盘上

test echo_helloworld_free       ... bench:     271,418 ns/iter (+/- 17,522)
test echo_helloworld_jailed     ... bench:     461,749 ns/iter (+/- 26,267)
test get_ips                    ... bench:      29,591 ns/iter (+/- 3,315)
test start_echo_helloworld_stop ... bench:     504,978 ns/iter (+/- 23,717)
test start_stop_ipjail          ... bench:      27,220 ns/iter (+/- 2,141)
test start_stop_ipv4jail        ... bench:      26,307 ns/iter (+/- 2,159)
test start_stop_ipv6jail        ... bench:      26,988 ns/iter (+/- 2,486)
test start_stop_jail            ... bench:      25,760 ns/iter (+/- 2,244)

许可证

FOSSA Status

依赖关系

~4–11MB
~130K SLoC