extrasafe 项目教程
项目介绍
extrasafe
是一个 Rust 库,旨在通过选择性地允许程序执行的系统调用(通过 Linux 内核的 seccomp 设施)来提高程序的安全性。它是一个易于使用的包装器,围绕各种 Linux 安全工具,包括 seccomp 过滤器、系统调用过滤功能、Landlock Linux 安全模块以及用户命名空间,以实现更广泛的隔离。这些工具被 systemd、Chrome 容器运行时和应用程序沙箱(如 bubblewrap 和 firejail)使用。extrasafe
的目标是使添加额外安全性到自己的程序变得容易,而不必依赖外部配置。
项目快速启动
安装
首先,确保你已经安装了 Rust 和 Cargo。然后,将 extrasafe
添加到你的 Cargo.toml
文件中:
[dependencies]
extrasafe = "0.5.1"
示例代码
以下是一个简单的示例,展示了如何使用 extrasafe
来限制系统调用:
use extrasafe::SafetyContext;
use extrasafe::builtins::UserNamespaces;
fn main() {
let mut context = SafetyContext::new();
context.enable(UserNamespaces).unwrap();
context.apply().unwrap();
println!("User namespaces are now restricted!");
}
应用案例和最佳实践
案例1:限制网络访问
如果你的程序不需要网络访问,可以使用 extrasafe
来禁用网络相关的系统调用:
use extrasafe::SafetyContext;
use extrasafe::builtins::NoNetworking;
fn main() {
let mut context = SafetyContext::new();
context.enable(NoNetworking).unwrap();
context.apply().unwrap();
println!("Network access is now restricted!");
}
案例2:隔离文件系统访问
使用 Landlock
模块来限制对特定文件和目录的访问:
use extrasafe::SafetyContext;
use extrasafe::builtins::Landlock;
fn main() {
let mut context = SafetyContext::new();
context.enable(Landlock::new().read_only("/path/to/safe/directory")).unwrap();
context.apply().unwrap();
println!("Access to the specified directory is now read-only!");
}
典型生态项目
systemd
systemd
使用 extrasafe
来增强其服务的安全性,通过限制不必要的系统调用和隔离资源访问。
Chrome 容器运行时
Chrome 浏览器使用 extrasafe
来隔离其沙箱环境,确保恶意代码无法访问关键系统资源。
bubblewrap 和 firejail
bubblewrap
和 firejail
是两个流行的应用程序沙箱工具,它们使用 extrasafe
来提供更细粒度的控制和隔离。
通过这些案例和生态项目的介绍,你可以更好地理解如何在实际项目中应用 extrasafe
来提高程序的安全性。