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 日 |
#535 在 Unix API
每月 25 次下载
在 3 crates 中使用
84KB
1.5K SLoC
libjail-rs
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)
许可证
依赖关系
~4–11MB
~130K SLoC