1 个不稳定版本

0.2.0 2021年3月30日
0.1.0 2021年3月12日
0.0.0 2019年7月19日

#1977 in 命令行工具

每月下载量:27

MITLGPL-2.1

45KB
1K SLoC

carapace

Crates.io MIT licensed Docs CI

在线评判器的代码运行器。

carapace 会启动一个不受信任的程序,并测量该程序消耗的时间和内存。

carapace 设计用于安全计算。它可以利用 Linux 命名空间子系统、资源限制、cgroups、seccomp-bpf 和 chroot 来限制程序。

安装

通过 cargo

cargo install carapace

从源码安装

cargo install --path .

安装到 /usr/local/bin/carapace

./install.sh

用法

carapace 0.2.0
Nugine <Nugine@163.com>

USAGE:
    carapace [FLAGS] [OPTIONS] <bin> [--] [args]...

ARGS:
    <bin>        
    <args>...    

FLAGS:
        --seccomp-forbid-ipc    
    -h, --help                  Prints help information
    -V, --version               Prints version information

OPTIONS:
    -e, --env <env>...                      
    -c, --chroot <path>                     
        --uid <uid>                         
        --gid <gid>                         
        --stdin <path>                      
        --stdout <path>                     
        --stderr <path>                     
        --stdin-fd <fd>                     
        --stdout-fd <fd>                    
        --stderr-fd <fd>                    
    -t, --real-time-limit <milliseconds>    
        --rlimit-cpu <seconds>              
        --rlimit-as <bytes>                 
        --rlimit-data <bytes>               
        --rlimit-fsize <bytes>              
        --cg-limit-memory <bytes>           
        --cg-limit-max-pids <count>         
        --bindmount-rw <bindmount>...       
    -b, --bindmount-ro <bindmount>...       
        --mount-proc=<path>                 
        --mount-tmpfs=<path>                
        --priority <prio>                   
        --report <path>                     
        --report-fd <fd>

示例

最小的不受信任的 shell

mkdir untrusted-workspace

sudo carapace \
    --uid `id -u` --gid `id -g` \
    -c untrusted-workspace \
    -b /bin /lib /lib64 \
    -t 60000 \
    --cg-limit-memory 256000000 \
    -- /bin/sh

以当前用户身份运行,chroot 到不受信任的工作空间,并挂载必要的依赖。

时间限制:60s。内存限制:256MB。

hello-world.c

#include <stdio.h>
int main(){
    printf("Hello, World!\n");
    return 0;
}
mkdir workspace
gcc hello-world.c -o workspace/hello

sudo carapace \
    --uid `id -u` --gid `id -g` \
    -c workspace \
    -b /lib /lib64 \
    -t 1000 \
    --cg-limit-memory 512000 \
    -- ./hello

以当前用户身份运行,chroot 到工作空间,并挂载必要的依赖。

时间限制:1s。内存限制:512KB。

输出

Hello, World!
{"code":0,"signal":0,"real_time":1,"sys_time":0,"user_time":0,"memory":248}

实际时间:1ms。系统时间:0ms。用户时间:0ms。

内存:248 KiB。

依赖项

~9–18MB
~207K SLoC