nsjail/config.proto

230 lines
10 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 21:40:24 +08:00
LISTEN = 0; /* Listening on a TCP port */
ONCE = 1; /* Running the command once only */
RERUN = 2; /* Re-executing the command (forever) */
2017-05-27 09:59:02 +08:00
EXECVE = 3; /* Executing command w/o the supervisor */
2017-05-26 10:37:50 +08:00
}
2017-05-27 21:40:24 +08:00
/* Should be self explanatory */
enum LogLevel {
DEBUG = 0; /* Equivalent to the '-v' cmd-line option */
INFO = 1; /* Default level */
WARNING = 2; /* Equivalent to the '-q' cmd-line option */
2017-05-27 09:59:02 +08:00
ERROR = 3;
FATAL = 4;
2017-05-26 20:08:09 +08:00
}
message IdMap {
2017-05-27 09:59:02 +08:00
/* Empty string means "current uid/gid" */
optional string inside_id = 1 [default = ""];
optional string outside_id = 2 [default = ""];
/* See 'man user_namespaces' for the meaning of count */
optional uint32 count = 3 [default = 1];
2017-05-27 09:59:02 +08:00
/* Does this map use /usr/bin/new[u|g]idmap binary? */
optional bool use_newidmap = 4 [default = false];
2017-05-26 23:50:28 +08:00
}
message MountPt {
/* Can be skipped for filesystems like 'proc' */
2018-02-12 06:44:43 +08:00
optional string src = 1 [default = ""];
2017-06-12 08:08:16 +08:00
/* Should 'src' path be prefixed with this envvar? */
2018-02-12 06:44:43 +08:00
optional string prefix_src_env = 2 [default = ""];
2017-06-12 08:08:16 +08:00
/* If specified, contains buffer that will be written to the dst file */
2018-02-12 06:44:43 +08:00
optional bytes src_content = 3 [default = ""];
2017-06-12 08:08:16 +08:00
/* Mount point inside jail */
2018-02-12 06:44:43 +08:00
required string dst = 4 [default = ""];
2017-06-12 08:08:16 +08:00
/* Should 'dst' path be prefixed with this envvar? */
2018-02-12 06:44:43 +08:00
optional string prefix_dst_env = 5 [default = ""];
2017-05-27 09:59:02 +08:00
/* Can be empty for mount --bind mounts */
optional string fstype = 6 [default = ""];
2017-05-27 09:59:02 +08:00
/* E.g. size=5000000 for 'tmpfs' */
optional string options = 7 [default = ""];
2017-05-27 09:59:02 +08:00
/* Is it 'mount --bind src dst' type of mount */
optional bool is_bind = 8 [default = false];
2017-05-28 07:24:55 +08:00
/* It it R/W mount */
optional bool rw = 9 [default = false];
2017-05-27 09:59:02 +08:00
/* Is it directory? If not specified an internal
2017-05-27 21:40:24 +08:00
heuristics will be used to determine that */
optional bool is_dir = 10;
2017-05-27 21:40:24 +08:00
/* Should the sandboxing fail if we cannot mount this resource? */
optional bool mandatory = 11 [default = true];
2017-09-27 21:36:05 +08:00
/* Is it a symlink (instead of real mount point)? */
optional bool is_symlink = 12 [default = false];
2017-05-27 07:16:12 +08:00
}
enum RLimit {
VALUE = 0; /* Use the provided value */
SOFT = 1; /* Use the current soft rlimit */
HARD = 2; /* Use the current hard rlimit */
INF = 3; /* Use RLIM64_INFINITY */
}
message Exe {
/* Will be used both as execv's path and as argv[0] */
2017-05-27 09:59:02 +08:00
required string path = 1;
/* This will be argv[1] and so on.. */
repeated string arg = 2;
/* Override argv[0] */
optional string arg0 = 3;
/* Should execveat() be used to execute a file-descriptor instead? */
optional bool exec_fd = 4 [default = false];
2017-05-27 08:24:41 +08:00
}
message NsJailConfig {
2017-06-12 08:08:16 +08:00
/* Optional name and description for this config */
optional string name = 1 [default = ""];
repeated string description = 2;
2017-05-28 01:05:42 +08:00
2017-05-27 09:59:02 +08:00
/* Execution mode: see 'msg Mode' description for more */
optional Mode mode = 3 [default = ONCE];
/* Equivalent to a bind mount with dst='/'. DEPRECATED: Use bind mounts. */
optional string chroot_dir = 4 [deprecated = true];
/* Applies both to the chroot_dir and to /proc mounts. DEPRECATED: Use bind mounts */
optional bool is_root_rw = 5 [default = false, deprecated = true];
2017-05-27 09:59:02 +08:00
/* Hostname inside jail */
optional string hostname = 8 [default = "NSJAIL"];
2017-05-27 09:59:02 +08:00
/* Initial current working directory for the binary */
optional string cwd = 9 [default = "/"];
2017-05-27 09:59:02 +08:00
/* TCP port to listen to. Valid with mode=LISTEN only */
optional uint32 port = 10 [default = 0];
2017-05-27 09:59:02 +08:00
/* Host to bind to for mode=LISTEN. Must be in IPv6 format */
optional string bindhost = 11 [default = "::"];
2017-05-27 09:59:02 +08:00
/* For mode=LISTEN, maximum number of connections from a single IP */
optional uint32 max_conns_per_ip = 12 [default = 0];
2017-05-27 09:59:02 +08:00
/* Wall-time time limit for commands */
optional uint32 time_limit = 13 [default = 600];
2017-05-27 09:59:02 +08:00
/* Should nsjail go into background? */
optional bool daemon = 14 [default = false];
2017-06-19 23:05:01 +08:00
/* Maximum number of CPUs to use: 0 - no limit */
optional uint32 max_cpus = 15 [default = 0];
2017-05-27 10:06:28 +08:00
/* FD to log to. */
optional int32 log_fd = 16;
2017-05-27 09:59:02 +08:00
/* File to save lofs to */
optional string log_file = 17;
2017-05-27 09:59:02 +08:00
/* Minimum log level displayed.
2017-05-27 21:40:24 +08:00
See 'msg LogLevel' description for more */
optional LogLevel log_level = 18;
2017-05-27 10:06:28 +08:00
2017-05-27 09:59:02 +08:00
/* Should the current environment variables be kept
2017-05-27 21:40:24 +08:00
when executing the binary */
optional bool keep_env = 19 [default = false];
2017-05-27 10:06:28 +08:00
/* EnvVars to be set before executing binaries */
repeated string envar = 20;
2017-05-27 10:06:28 +08:00
2017-07-05 23:29:57 +08:00
/* Should capabilities be preserved or dropped */
optional bool keep_caps = 21 [default = false];
2017-07-06 07:12:13 +08:00
/* Which capabilities should be preserved if keep_caps == false.
Format: "CAP_SYS_PTRACE" */
repeated string cap = 22;
2017-05-27 09:59:02 +08:00
/* Should nsjail close FD=0,1,2 before executing the process */
optional bool silent = 23 [default = false];
2017-05-27 09:59:02 +08:00
/* Should the child process have control over terminal?
2017-05-27 21:40:24 +08:00
Can be useful to allow /bin/sh to provide
2017-11-02 20:08:08 +08:00
job control / signals. Dangerous, can be used to put
characters into the controlling terminal back */
optional bool skip_setsid = 24 [default = false];
2017-05-27 09:59:02 +08:00
/* Which FDs should be passed to the newly executed process
2017-05-27 21:40:24 +08:00
By default only FD=0,1,2 are passed */
repeated int32 pass_fd = 25;
2017-05-27 09:59:02 +08:00
/* Setting it to true will allow to have set-uid binaries
2017-05-27 21:40:24 +08:00
inside the jail */
optional bool disable_no_new_privs = 26 [default = false];
2017-05-27 09:59:02 +08:00
2017-10-07 04:44:55 +08:00
/* Various rlimits, the rlimit_as/rlimit_core/... are used only if
rlimit_as_type/rlimit_core_type/... are set to RLimit::VALUE */
optional uint64 rlimit_as = 27 [default = 512]; /* In MiB */
optional RLimit rlimit_as_type = 28 [default = VALUE];
optional uint64 rlimit_core = 29 [default = 0]; /* In MiB */
optional RLimit rlimit_core_type = 30 [default = VALUE];
optional uint64 rlimit_cpu = 31 [default = 600]; /* In seconds */
optional RLimit rlimit_cpu_type = 32 [default = VALUE];
optional uint64 rlimit_fsize = 33 [default = 1]; /* In MiB */
optional RLimit rlimit_fsize_type = 34 [default = VALUE];
optional uint64 rlimit_nofile = 35 [default = 32];
optional RLimit rlimit_nofile_type = 36 [default = VALUE];
/* RLIMIT_NPROC is system-wide - tricky to use; use the soft limit value by
* default here */
optional uint64 rlimit_nproc = 37 [default = 1024];
optional RLimit rlimit_nproc_type = 38 [default = SOFT];
/* In MiB, use the soft limit value by default */
optional uint64 rlimit_stack = 39 [default = 1048576];
optional RLimit rlimit_stack_type = 40 [default = SOFT];
2017-05-27 09:59:02 +08:00
/* See 'man personality' for more */
optional bool persona_addr_compat_layout = 41 [default = false];
optional bool persona_mmap_page_zero = 42 [default = false];
optional bool persona_read_implies_exec = 43 [default = false];
optional bool persona_addr_limit_3gb = 44 [default = false];
optional bool persona_addr_no_randomize = 45 [default = false];
2017-05-27 09:59:02 +08:00
/* Which name-spaces should be used? */
optional bool clone_newnet = 46 [default = true];
optional bool clone_newuser = 47 [default = true];
optional bool clone_newns = 48 [default = true];
optional bool clone_newpid = 49 [default = true];
optional bool clone_newipc = 50 [default = true];
optional bool clone_newuts = 51 [default = true];
/* Disable for kernel versions < 4.6 as it's not supported there */
optional bool clone_newcgroup = 52 [default = true];
2017-05-27 09:59:02 +08:00
/* Mappings for UIDs and GIDs. See the description for 'msg IdMap'
2017-05-27 21:40:24 +08:00
for more */
repeated IdMap uidmap = 53;
repeated IdMap gidmap = 54;
2017-05-27 07:16:12 +08:00
/* Should /proc be mounted (R/O)? This can also be added in the 'mount'
section below */
optional bool mount_proc = 55 [default = false];
2017-05-27 09:59:02 +08:00
/* Mount points inside the jail. See the description for 'msg MountPt'
2017-05-27 21:40:24 +08:00
for more */
repeated MountPt mount = 56;
2017-05-27 08:09:21 +08:00
/* Kafel seccomp-bpf policy file or a string:
2017-05-27 21:40:24 +08:00
Homepage of the project: https://github.com/google/kafel */
optional string seccomp_policy_file = 57;
repeated string seccomp_string = 58;
2018-05-23 21:38:45 +08:00
optional bool seccomp_log = 77 [default = false];
2017-05-27 09:59:02 +08:00
/* If > 0, maximum cumulative size of RAM used inside any jail */
optional uint64 cgroup_mem_max = 59 [default = 0]; /* In MiB */
/* Mount point for cgroups-memory in your system */
optional string cgroup_mem_mount = 60 [default = "/sys/fs/cgroup/memory"];
2017-05-27 09:59:02 +08:00
/* Writeable directory (for the nsjail user) under cgroup_mem_mount */
optional string cgroup_mem_parent = 61 [default = "NSJAIL"];
2017-05-27 09:59:02 +08:00
/* If > 0, maximum number of PIDs (threads/processes) inside jail */
optional uint64 cgroup_pids_max = 62 [default = 0];
/* Mount point for cgroups-pids in your system */
optional string cgroup_pids_mount = 63 [default = "/sys/fs/cgroup/pids"];
2017-05-27 09:59:02 +08:00
/* Writeable directory (for the nsjail user) under cgroup_pids_mount */
optional string cgroup_pids_parent = 64 [default = "NSJAIL"];
2017-05-27 09:59:02 +08:00
2017-10-26 06:35:59 +08:00
/* If > 0, Class identifier of network packets inside jail */
optional uint32 cgroup_net_cls_classid = 65 [default = 0];
/* Mount point for cgroups-net-cls in your system */
optional string cgroup_net_cls_mount = 66 [default = "/sys/fs/cgroup/net_cls"];
/* Writeable directory (for the nsjail user) under cgroup_net_mount */
optional string cgroup_net_cls_parent = 67 [default = "NSJAIL"];
2018-02-04 11:15:19 +08:00
/* If > 0 number of milliseconds of CPU that jail processes can use per each second */
optional uint32 cgroup_cpu_ms_per_sec = 68 [default = 0];
/* Mount point for cgroups-cpu in your system */
optional string cgroup_cpu_mount = 69 [default = "/sys/fs/cgroup/cpu"];
/* Writeable directory (for the nsjail user) under cgroup_cpu_mount */
optional string cgroup_cpu_parent = 70 [default = "NSJAIL"];
/* Should the 'lo' interface be brought up (active) inside this jail? */
2018-02-04 11:15:19 +08:00
optional bool iface_no_lo = 71 [default = false];
2017-05-27 09:59:02 +08:00
/* Parameters for the cloned MACVLAN interface inside jail */
2018-02-04 11:15:19 +08:00
optional string macvlan_iface = 72; /* Interface to be cloned, eg 'eth0' */
optional string macvlan_vs_ip = 73 [default = "192.168.0.2"];
optional string macvlan_vs_nm = 74 [default = "255.255.255.0"];
optional string macvlan_vs_gw = 75 [default = "192.168.0.1"];
2017-05-27 09:59:02 +08:00
/* Binary path (with arguments) to be executed. If not specified here, it
can be specified with cmd-line as "-- /path/to/command arg1 arg2" */
2018-02-04 11:15:19 +08:00
optional Exe exec_bin = 76;
2017-05-26 07:55:02 +08:00
}