nsjail/config.proto

170 lines
6.6 KiB
Protocol Buffer
Raw Normal View History

2017-05-26 11:01:22 +08:00
syntax = "proto2";
2017-05-26 07:55:02 +08:00
package nsjail;
2017-05-26 10:37:50 +08:00
enum Mode {
2017-05-27 09:20:10 +08:00
LISTEN = 0; /* Listening on a TCP port */
ONCE = 1; /* Running the command once only */
RERUN = 2; /* Re-executing the command (forever) */
EXECVE = 3; /* Executing command w/o the supervisor */
2017-05-26 10:37:50 +08:00
}
2017-05-27 09:20:10 +08:00
/* Should be self explanatory */
2017-05-26 20:08:09 +08:00
enum LogLevel {
DEBUG = 0;
INFO = 1;
WARNING = 2;
ERROR = 3;
FATAL = 4;
}
2017-05-26 23:50:28 +08:00
message IdMap {
2017-05-27 09:20:10 +08:00
/* Empty string means "current uid/gid" */
required string inside_id = 1 [default = ""];
required string outside_id = 2 [default = ""];
2017-05-27 09:20:10 +08:00
/* 'man user_namespaces' for the meaning of count */
2017-05-26 23:50:28 +08:00
required uint32 count = 3 [default = 1];
2017-05-27 09:20:10 +08:00
/* Does this map use /usr/bin/new[u|g]idmap binary? */
required bool use_newidmap = 4 [default = false];
2017-05-26 23:50:28 +08:00
}
2017-05-27 07:16:12 +08:00
message MountPt {
2017-05-27 09:20:10 +08:00
/* Can be empty string for filesystems like 'proc' */
2017-05-27 07:16:12 +08:00
required string src = 1;
required string dst = 2;
2017-05-27 09:20:10 +08:00
/* Can be empty for mount --bind mounts */
2017-05-27 07:16:12 +08:00
required string fstype = 3;
2017-05-27 09:20:10 +08:00
/* E.g. size=5000000 for 'tmpfs' */
2017-05-27 07:16:12 +08:00
required string options = 4 [default = ""];
2017-05-27 09:20:10 +08:00
/* Is it 'mount --bind src dst' type of mount */
2017-05-27 07:16:12 +08:00
required bool is_bind = 5 [default = false];
2017-05-27 09:20:10 +08:00
/* It it RO mount */
2017-05-27 07:16:12 +08:00
required bool is_ro = 6 [default = false];
2017-05-27 09:20:10 +08:00
/* Is it directory? If not specified an internal
* heuristics will be used to determine that */
2017-05-27 07:16:12 +08:00
optional bool is_dir = 7;
}
2017-05-27 08:24:41 +08:00
message Exe {
2017-05-27 09:20:10 +08:00
/* This will be usef both for path and for argv[0] */
2017-05-27 08:24:41 +08:00
required string path = 1;
2017-05-27 09:20:10 +08:00
/* This will be argv[1] and so on.. */
2017-05-27 08:24:41 +08:00
repeated string arg = 2;
}
2017-05-26 07:55:02 +08:00
message NsJailConfig {
2017-05-27 09:20:10 +08:00
/* Execution mode: see 'msg Mode' description for more */
2017-05-26 11:01:22 +08:00
required Mode mode = 1 [default = ONCE];
2017-05-27 09:20:10 +08:00
/* Equivalent to a mount with dst='/' */
optional string chroot_dir = 2;
2017-05-27 09:20:10 +08:00
/* Applies both to the chroot_dir and to /proc mounts */
2017-05-26 11:01:22 +08:00
required bool is_root_rw = 3 [default = false];
2017-05-27 09:20:10 +08:00
/* Hostname inside jail */
required string hostname = 6 [default = "NSJAIL"];
2017-05-27 09:20:10 +08:00
/* Initial current working directory for the binary */
required string cwd = 7 [default = "/"];
2017-05-26 23:50:28 +08:00
2017-05-27 09:20:10 +08:00
/* TCP port to listen to. Valid with mode=LISTEN only */
2017-05-26 11:12:01 +08:00
required uint32 port = 8 [default = 0];
2017-05-27 09:20:10 +08:00
/* Host to bind to for mode=LISTEN. Must be in IPv6 format */
required string bindhost = 9 [default = "::"];
2017-05-27 09:20:10 +08:00
/* For mode=LISTEN, maximum number of connections from a single IP */
2017-05-26 11:12:01 +08:00
required uint32 max_conns_per_ip = 10 [default = 0];
2017-05-26 23:50:28 +08:00
2017-05-27 09:20:10 +08:00
/* Wall-time time limit for commands */
2017-05-26 21:22:59 +08:00
required uint32 time_limit = 11 [default = 600];
2017-05-27 09:20:10 +08:00
/* Should nsjail go into background? */
2017-05-26 21:22:59 +08:00
required bool daemon = 12 [default = false];
2017-05-27 09:20:10 +08:00
/* File to save lofs to */
optional string log_file = 13;
2017-05-27 09:20:10 +08:00
/* Minimum log level displayed.
See 'msg LogLevel' description for more */
2017-05-26 21:22:59 +08:00
optional LogLevel log_level = 14;
2017-05-27 09:23:08 +08:00
/* Should the current environment variables be kept
when executing the binary */
2017-05-26 20:08:09 +08:00
required bool keep_env = 15 [default = false];
2017-05-27 09:20:10 +08:00
/* Should nsjail close FD=0,1,2 before executing the process */
2017-05-26 20:08:09 +08:00
required bool silent = 16 [default = false];
2017-05-27 09:20:10 +08:00
/* Should the child process have control over terminal?
Can be useful to allow /bin/sh to provide
job control / signals */
2017-05-26 20:08:09 +08:00
required bool skip_setsid = 17 [default = false];
2017-05-27 09:23:08 +08:00
/* Which FDs should be passed to the newly executed process
By default only FD=0,1,2 are passed */
2017-05-26 20:08:09 +08:00
repeated int32 pass_fd = 18;
2017-05-27 09:23:08 +08:00
/* Should pivot_root be used instead of chroot?
Using pivot_root allows to have subnamespaces */
2017-05-26 20:08:09 +08:00
required bool pivot_root_only = 19 [ default = false];
2017-05-27 09:20:10 +08:00
/* Setting it to true will allow to have set-uid binaries
inside the jail */
2017-05-26 20:08:09 +08:00
required bool disable_no_new_privs = 20 [default = false];
2017-05-26 23:50:28 +08:00
2017-05-27 09:20:10 +08:00
required uint64 rlimit_as = 21 [default = 512]; /* In MiB */
required uint64 rlimit_core = 22 [default = 0]; /* In MiB */
required uint64 rlimit_cpu = 23 [default = 600]; /* In seconds */
required uint64 rlimit_fsize = 24 [default = 1]; /* In MiB */
2017-05-26 20:08:09 +08:00
required uint64 rlimit_nofile = 25 [default = 32];
optional uint64 rlimit_nproc = 26;
2017-05-27 09:20:10 +08:00
optional uint64 rlimit_stack = 27; /* In MiB */
2017-05-26 23:50:28 +08:00
2017-05-27 09:20:10 +08:00
/* See 'man personality' for more */
2017-05-26 23:50:28 +08:00
required bool persona_addr_compat_layout = 28 [default = false];
required bool persona_mmap_page_zero = 29 [default = false];
required bool persona_read_implies_exec = 30 [default = false];
required bool persona_addr_limit_3gb = 31 [default = false];
required bool persona_addr_no_randomize = 32 [default = false];
2017-05-27 09:20:10 +08:00
/* Which name-spaces should be used? */
2017-05-26 23:50:28 +08:00
required bool clone_newnet = 33 [default = true];
required bool clone_newuser = 34 [default = true];
required bool clone_newns = 35 [default = true];
required bool clone_newpid = 36 [default = true];
required bool clone_newipc = 37 [default = true];
required bool clone_newuts = 38 [default = true];
2017-05-27 09:20:10 +08:00
/* It's only supported in newer kernels, hence disabled by default */
2017-05-26 23:50:28 +08:00
required bool clone_newcgroup = 39 [default = false];
2017-05-27 09:20:10 +08:00
/* Mappings for UIDs and GIDs. See the description for 'msg IdMap'
2017-05-27 09:29:40 +08:00
for more */
2017-05-27 05:26:07 +08:00
repeated IdMap uidmap = 40;
repeated IdMap gidmap = 41;
2017-05-27 07:16:12 +08:00
2017-05-27 09:20:10 +08:00
/* Mount points inside the jail. See the description for 'msg MountPt'
2017-05-27 09:29:40 +08:00
for more */
2017-05-27 07:16:12 +08:00
repeated MountPt mount = 42;
2017-05-27 09:20:10 +08:00
/* Should /proc be mounted? One can also force this in the 'mount' */
2017-05-27 07:35:00 +08:00
required bool mount_proc = 43 [default = true];
2017-05-27 08:09:21 +08:00
2017-05-27 09:20:10 +08:00
/* Kafel seccomp policy file or string.
2017-05-27 09:23:08 +08:00
Homepage of the project: https://github.com/google/kafel */
2017-05-27 07:35:00 +08:00
optional string seccomp_policy_file = 44;
optional string seccomp_string = 45;
2017-05-27 08:09:21 +08:00
2017-05-27 09:20:10 +08:00
/* If > 0, maximum cumulative size of RAM used inside jail */
required uint64 cgroup_mem_max = 46 [default = 0]; /* In MiB */
/* Mount point for cgroups-memory */
2017-05-27 08:09:21 +08:00
required string cgroup_mem_mount = 47 [default = "/sys/fs/cgroup/memory"];
2017-05-27 09:20:10 +08:00
/* Writeable directory (for the nsjail user) under cgroup_mem_mount */
2017-05-27 08:09:21 +08:00
required string cgroup_mem_parent = 48 [default = "NSJAIL"];
2017-05-27 09:20:10 +08:00
/* If > 0, maximum number of PIDs (threads/processes) inside jail */
2017-05-27 08:09:21 +08:00
required uint64 cgroup_pids_max = 49 [default = 0];
2017-05-27 09:20:10 +08:00
/* Mount point for cgroups-memory */
2017-05-27 08:09:21 +08:00
required string cgroup_pids_mount = 50 [default = "/sys/fs/cgroup/pids"];
2017-05-27 09:20:10 +08:00
/* Writeable directory (for the nsjail user) under cgroup_pids_mount */
2017-05-27 08:09:21 +08:00
required string cgroup_pids_parent = 51 [default = "NSJAIL"];
2017-05-27 09:20:10 +08:00
/* Should the 'lo' interface be brought up inside jail? */
2017-05-27 08:09:21 +08:00
required bool iface_no_lo = 52 [default = false];
2017-05-27 09:20:10 +08:00
/* Parameters for the cloned MACVLAN interface inside jail */
optional string macvlan_iface = 53; /* Interface to be cloned, eg 'eth0' */
2017-05-27 08:09:21 +08:00
required string macvlan_vs_ip = 54 [default = "192.168.0.2"];
required string macvlan_vs_nm = 55 [default = "255.255.255.0"];
required string macvlan_vs_gw = 56 [default = "192.168.0.1"];
2017-05-27 08:24:41 +08:00
2017-05-27 09:20:10 +08:00
/* Binary with arguments to be executed. If not specified here, it can be
2017-05-27 09:29:06 +08:00
specified with the command-line as "-- /path/to/command arg1 arg2" */
2017-05-27 08:24:41 +08:00
optional Exe exec_bin = 57;
2017-05-26 07:55:02 +08:00
}