nsjail

A light-weight process isolation tool, making use of Linux namespaces and seccomp-bpf syscall filters (with help of the kafel bpf language)

Github星跟踪图


This is NOT an official Google product.


Overview

NsJail is a process isolation tool for Linux. It utilizes Linux namespace subsystem, resource limits, and the seccomp-bpf syscall filters of the Linux kernel.

It can help you with (among other things):

  • Isolating networking services (e.g. web, time, DNS), by isolating them from the rest of the OS
  • Hosting computer security challenges (so-called CTFs)
  • Containing invasive syscall-level OS fuzzers

Features:


What forms of isolation does it provide

  1. Linux namespaces: UTS (hostname), MOUNT (chroot), PID (separate PID tree), IPC, NET (separate networking context), USER, CGROUPS
  2. FS constraints: chroot(), pivot_root(), RO-remounting, custom /proc and tmpfs mount points
  3. Resource limits (wall-time/CPU time limits, VM/mem address space limits, etc.)
  4. Programmable seccomp-bpf syscall filters (through the kafel language)
  5. Cloned and isolated Ethernet interfaces
  6. Cgroups for memory and PID utilization control

Which use-cases are supported

Isolation of network services (inetd style)

PS: You'll need to have a valid file-system tree in /chroot. If you don't have it, change /chroot to /

  • Server:
  • Client:

Isolation with access to a private, cloned interface (requires root/setuid)

PS: You'll need to have a valid file-system tree in /chroot. If you don't have it, change /chroot to /

Isolation of local processes

PS: You'll need to have a valid file-system tree in /chroot. If you don't have it, change /chroot to /

Isolation of local processes (and re-running them, if necessary)

PS: You'll need to have a valid file-system tree in /chroot. If you don't have it, change /chroot to /

Bash in a minimal file-system with uid==0 and access to /dev/urandom only

/usr/bin/find in a minimal file-system (only /usr/bin/find accessible from /usr/bin)

Using /etc/subuid

Even more contrained shell (with seccomp-bpf policies)


Configuration file

You will also find all examples in the configs directory.


config.proto contains ProtoBuf schema for nsjail's configuration format.


You can examine an example config file in configs/bash-with-fake-geteuid.cfg.

Usage:

You can also override certain options with command-line options. Here, the executed binary (/bin/bash) is overriden with /usr/bin/id, yet options from configs/bash-with-fake-geteuid.cfg still apply


You might also want to try using configs/home-documents-with-xorg-no-net.cfg.


The configs/firefox-with-net.cfg
config file will allow you to run firefox inside a sandboxed environment:

A more complex setup, which utilizes virtualized (cloned) Ethernet
interfaces (to separate it from the main network namespace), can be
found in configs/firefox-with-cloned-net.cfg.
Remember to change relevant UIDs and Ethernet interface names before use.

As using cloned Ethernet interfaces (MACVTAP) required root privileges, you'll
have to run it under sudo:


More info

The command-line options should be self-explanatory, while the proto-buf config options are described in config.proto


Launching in Docker

To launch nsjail in a docker container clone the repository and build the docker image:

This will build up an image containing njsail and kafel.

From now you can either use it in another Dockerfile (FROM nsjailcontainer) or directly:


Contact

主要指标

概览
名称与所有者google/nsjail
主编程语言C++
编程语言Makefile (语言数: 5)
平台
许可证Apache License 2.0
所有者活动
创建于2015-05-14 21:42:10
推送于2025-05-09 15:26:17
最后一次提交2025-05-09 17:26:09
发布数25
最新版本名称3.4 (发布于 )
第一版名称1.0 (发布于 )
用户参与
星数3.4k
关注者数88
派生数293
提交数1.3k
已启用问题?
问题数140
打开的问题数37
拉请求数94
打开的拉请求数1
关闭的拉请求数7
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?