#seccomp #libseccomp #linux

sys libscmp

Linux 上对 libseccomp 的安全、合理的 Rust 接口

2 个不稳定版本

0.2.0 2021年6月5日
0.1.0 2020年11月25日

#737Unix API

Download history 69/week @ 2024-03-11 81/week @ 2024-03-18 134/week @ 2024-03-25 135/week @ 2024-04-01 73/week @ 2024-04-08 80/week @ 2024-04-15 70/week @ 2024-04-22 76/week @ 2024-04-29 63/week @ 2024-05-06 49/week @ 2024-05-13 61/week @ 2024-05-20 54/week @ 2024-05-27 50/week @ 2024-06-03 64/week @ 2024-06-10 62/week @ 2024-06-17 53/week @ 2024-06-24

每月下载量:238
用于 2 crate

MIT 许可证

59KB
1K SLoC

libscmp

crates.io Docs GitHub Actions codecov

Linux 上 libseccomp 的安全、合理 Rust 接口。

注意:这不是一个高级接口;该库中的大多数函数和方法直接对应于 libseccomp 的一个函数。然而,该库提供了一个合理、可用的 libseccomp 接口,这似乎是缺少的。

支持的 libseccomp 版本

默认情况下,libscmp 支持 libseccomp v2.3.0+。启用 libseccomp-2-4 功能将启用对 libseccomp v2.4.0+ API 的支持(并告知 libscmp 它可以假设它将永远不与 v2.4.0 之前的任何 libseccomp 版本运行)。libseccomp-2-5 功能与此类似(并暗示 libseccomp-2-4)。

重要:最小版本检测

libscmp 假设由功能标志指定的最小版本是正确的。例如,如果指定了 libseccomp-2-4 功能,libscmp 可能会通过假设 libseccomp v2.4.0 中添加的功能存在来执行优化,而不是显式地探测它们。但是,它不会检查实际在运行时加载的 libseccomp 的版本,以确定这是否正确。

这不太可能导致任何严重问题,在大多数情况下一切都会正常。但是,如果您无法保证始终加载正确的 libseccomp 版本(例如,如果您正在分发编译后的二进制文件,最终用户可能会在较旧的系统上下载和运行),建议您检查 libseccomp_version() 如下:assert!(libscmp::libseccomp_version() >= (2, 4, 0));

构建依赖的 crate

要构建一个依赖于 libscmp 的crate,您需要安装 libseccomp :-)。您可能需要安装 "开发" 版本的 libseccomp 软件包(例如,Debian/Ubuntu 上的 libseccomp-dev),以便它能被正确找到。

静态链接 musl libc

在 musl libc 上构建此 crate 非常棘手,因为您需要安装一个针对 musl 编译的静态链接版本 libseccomp。这通常意味着您必须手动构建 libseccomp(!)或使用提供静态链接 libseccomp 的基于 musl 的发行版。

以下是一个使用 Alpine Linux Docker 容器构建 musl 的概念证明。在大多数情况下,您可能希望创建一个包含已安装依赖项的单独 Docker 镜像(然后在实际编译时切换用户),但这可以说明这个过程

docker run -v $PWD:/src --rm alpine:latest sh -c '
set -e
apk add libseccomp-static gcc
wget -O- https://sh.rustup.rs | sh /dev/stdin -y --default-host x86_64-unknown-linux-musl --default-toolchain stable
source $HOME/.cargo/env
cd /src
export RUSTFLAGS="-L /usr/lib"
cargo build
'

依赖项

~145KB