2 个不稳定版本
0.2.0 | 2021年6月5日 |
---|---|
0.1.0 | 2020年11月25日 |
#737 在 Unix API 中
每月下载量:238
用于 2 crate
59KB
1K SLoC
libscmp
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