4 releases (2 breaking)

0.3.1 Aug 31, 2023
0.3.0 Aug 31, 2023
0.2.2 Aug 29, 2023
0.2.1 Mar 29, 2023
0.1.0 Oct 19, 2022

#220 in Filesystem

Download history 50/week @ 2023-06-09 138/week @ 2023-06-16 110/week @ 2023-06-23 49/week @ 2023-06-30 83/week @ 2023-07-07 201/week @ 2023-07-14 125/week @ 2023-07-21 51/week @ 2023-07-28 269/week @ 2023-08-04 284/week @ 2023-08-11 229/week @ 2023-08-18 213/week @ 2023-08-25 91/week @ 2023-09-01 99/week @ 2023-09-08 76/week @ 2023-09-15 67/week @ 2023-09-22

435 downloads per month

GPL-3.0-or-later

260KB
736 lines

Birdcage

GitHub GitHub issues Contributor Covenant Discord Crate Documentation

Birdcage logo

About

Birdcage is a cross-platform embeddable sandboxing library allowing restrictions to Filesystem and Network operations using native operating system APIs.

Birdcage was originally developed for use by the Phylum CLI as an extra layer of protection against potentially malicious dependencies (see the blog post for details). To better protect yourself from these security risks, sign up now!

Birdcage focuses only on Filesystem and Network operations. It is not a complete sandbox preventing all side-effects or permanent damage. Applications can still execute most system calls, which is especially dangerous when execution is performed as root. Birdcage should be combined with other security mechanisms, especially if you are executing known-malicious code.

Example

An example for using Birdcage's API can be found in ./examples/sandbox, which runs an application with CLI-configurable restrictions applied.

Trying to run without any exceptions will produce an error:

$ cargo run --example sandbox -- echo "Hello, Sandbox\!"
Error: Os { code: 13, kind: PermissionDenied, message: "Permission denied" }

Running the same command with explicit permissions allows execution:

$ cargo run --example sandbox -- -e /usr/bin/echo -e /usr/lib echo "Hello, Sandbox\!"
Hello, Sandbox!

Check out cargo run --example sandbox -- --help for more information on how to use the example.

Supported Platforms

  • Linux (5.13+) via Landlock and seccomp
  • macOS via sandbox_init() (aka Seatbelt)

Dependencies