AI智能体安全沙箱:基于Linux命名空间与Seccomp的隔离实践

📅 2026/8/20 3:58:25
AI智能体安全沙箱:基于Linux命名空间与Seccomp的隔离实践
1. 项目概述为AI智能体戴上“紧箍咒”最近在折腾AI智能体Agent的本地部署和开发一个绕不开的痛点就是安全问题。想象一下你写了一个能自动分析数据、生成报告甚至调用外部API的智能体它本质上是一段能自主执行代码的程序。如果这段代码里有意或无意地包含了rm -rf /、curl恶意地址或者尝试扫描内网端口的指令后果会怎样轻则数据丢失重则成为攻击跳板。这就是为什么我们需要“沙箱”Sandbox——一个隔离的、受控的运行环境。今天要聊的Sandlock就是一个专门为这类AI Agent代码执行环境设计的轻量级安全沙箱方案。它的核心思路非常清晰利用Linux操作系统本身提供的、无需特殊权限Unprivileged的原语Primitives构建一个牢笼将不受信任的AI代码关在里面运行。这听起来像是容器技术但Sandlock的目标更聚焦、更底层它不追求完整的系统虚拟化而是专注于对单个进程及其子进程进行最严格的系统调用System Call和资源访问控制。为什么这件事现在变得如此重要因为AI智能体正从单纯的“对话模型”演变为“行动模型”。它们不再只是生成文本而是被赋予了执行代码、操作文件、访问网络的能力。这种能力的解放带来了巨大的生产力也打开了潘多拉魔盒。Sandlock试图回答的问题是我们能否在给予AI行动自由的同时确保它不会“越狱”不会对宿主机造成任何实质性损害它的答案是基于Linux已有的安全模块如命名空间Namespaces、控制组cgroups、能力Capabilities和Seccomp-BPF通过巧妙的组合拳实现一道坚固的防线。接下来我们就深入拆解这套“组合拳”是如何挥出的。2. 核心安全原理解析Linux的“积木块”Sandlock并非从零造轮子它的高明之处在于像搭积木一样组合运用了Linux内核多年来沉淀的一系列无特权安全特性。理解这些“积木块”是理解Sandlock如何工作的关键。我们常说Linux一切皆文件其安全模型也深深植根于此。2.1 命名空间视觉隔离的“平行世界”命名空间是Linux内核提供的资源隔离抽象。你可以把它想象成给进程分配了不同的“眼镜”戴上不同眼镜的进程看到的是完全不同的系统视图。Sandlock主要利用以下几种命名空间PID 命名空间在沙箱内进程的PID从1开始重新编号。沙箱内的进程看不到宿主机上的其他进程ps aux命令只能看到沙箱内部的“世界”。这防止了AI代码通过进程列表窥探或干扰宿主机的其他服务。Mount 命名空间这是文件系统隔离的核心。Sandlock可以为沙箱进程创建一个独立的文件系统挂载视图。通常它会先创建一个纯净的、最小化的根文件系统例如使用pivot_root切换到一个小型镜像如Alpine Linux的rootfs然后只挂载必要的目录如/tmp、/proc在PID命名空间内、/dev下的必要设备。这意味着AI代码即使尝试访问/etc/passwd它访问的也只是沙箱内部那个可能是空的或者伪造的文件宿主机真实的文件安然无恙。Network 命名空间沙箱进程拥有独立的网络栈、网卡、IP地址和路由表。默认情况下这个新网络空间是空的没有网络连接。如果需要网络Sandlock可以谨慎地通过vethpair虚拟设备将其连接到宿主机的网络或者直接设置为无网络。这从根本上杜绝了AI代码进行网络扫描、发起DDoS攻击或外联恶意服务器的可能。UTS 命名空间隔离主机名和域名。沙箱内可以有自己的主机名不会泄露宿主机信息。User 命名空间这是实现“无特权”沙箱的基石。它允许在宿主机上一个普通用户UID 1000在沙箱内部被映射成root用户UID 0。这样沙箱内的进程以为自己有root权限可以在内部进行各种需要特权的操作如绑定1024以下端口、挂载文件系统但这些操作被严格限制在沙箱的命名空间内不会影响到宿主机上真正的root用户。这是实现强隔离的同时又不需要让启动沙箱的进程具备sudo权限的关键。注意命名空间提供了视图隔离但并非绝对的安全边界。特别是如果宿主机内核存在漏洞如Dirty Pipe、Dirty Cow进程有可能突破命名空间。因此命名空间通常需要与其他机制结合使用。2.2 Seccomp-BPF系统调用的“安检门”如果说命名空间控制了进程“能看到什么”那么Seccomp-BPF就是控制进程“能做什么”的终极武器。它允许用户空间程序为进程及其子进程定义一套严格的规则规定哪些系统调用syscall可以被执行。系统调用是用户态程序请求内核服务的唯一入口比如open打开文件、read读数据、execve执行程序、socket创建网络套接字。Sandlock会为AI Agent进程加载一个高度限制性的Seccomp过滤器使用BPF字节码编写。这个过滤器通常采用默认拒绝deny-by-default策略只明确放行白名单中的系统调用。例如一个只允许进行纯计算的AI Agent其Seccomp规则可能只允许readwriteexitbrk管理内存等极少数的调用而明确禁止clone创建线程/进程、socket、mount、ptrace调试等危险调用。即使攻击者利用AI代码中的漏洞获得了执行任意代码的能力他也无法发起被禁止的系统调用攻击面被极大地缩小。实操心得编写Seccomp-BPF规则是门艺术。过于宽松则失去意义过于严格可能导致合法程序无法运行。一个实用的方法是先在一个宽松的沙箱中运行你的AI Agent使用strace -f命令跟踪其所有的系统调用根据实际需要生成一个最小化的白名单。Sandlock项目通常会预置一些针对不同场景如“无网络计算”、“只读文件访问”、“受限网络访问”的规则模板。2.3 控制组资源限额的“紧箍咒”控制组主要用来限制和隔离进程组的资源使用量。对于AI Agent我们尤其关心以下几点内存限制通过cgroup的memory.limit_in_bytes可以防止AI代码因内存泄漏或恶意分配耗尽宿主机内存导致系统被OOM Killer终止重要进程。CPU限制通过cpu.cfs_quota_us和cpu.cfs_period_us可以限制AI进程能使用的CPU时间片防止其进行高强度的计算型攻击如密码爆破或单纯地拖慢系统。进程数限制通过pids.max限制沙箱内能创建的最大进程/线程数量防止fork炸弹攻击。cgroups确保了AI Agent即使“行为不端”其破坏力也被限制在一个可控的范围内不会对宿主机的整体稳定性造成冲击。2.4 能力机制特权的“精细化剥夺”传统的Linux权限是二元的要么是全能root要么是受限用户。能力机制将root特权细分为几十个独立的单元如CAP_NET_BIND_SERVICE允许绑定特权端口CAP_SYS_ADMIN包含大量管理权限。Sandlock在启动沙箱前会调用prctl或libcap库丢弃进程的所有非必要能力。即使沙箱内进程以UID 0运行由于缺乏相应的能力它也无法执行特定的特权操作。例如即使沙箱内有root如果没有CAP_SYS_CHROOT能力就无法调用chroot没有CAP_NET_RAW就无法创建原始套接字用于ping等。这实现了权限的最小化原则。3. Sandlock架构设计与实现思路理解了基础“积木块”后我们来看Sandlock如何将它们组装成一个有机的整体。其架构核心是一个监督者进程它负责搭建牢笼然后将AI Agent代码“关进去”执行。3.1 监督者进程的启动流程监督者进程本身以一个普通用户身份运行。它的任务是为即将运行的不可信代码准备一个高度受限的执行环境。流程可以概括为以下几步创建新的命名空间通过unshare()系统调用一次性创建新的PIDMountNetworkUTSIPC命名空间。同时使用clone()系统调用并传入CLONE_NEWUSER标志来创建新的User命名空间。这一步构建了视觉和身份隔离的基础框架。映射用户与根目录在User命名空间创建后通过写入/proc/self/uid_map和/proc/self/gid_map文件完成宿主机普通用户到沙箱内root用户的映射。接着使用pivot_root()或chroot()切换到一个事先准备好的、最小化的根文件系统镜像中。挂载虚拟文件系统在新的Mount命名空间内挂载必要的虚拟文件系统如/proc用于进程信息、/sys只读用于获取系统信息、/dev仅创建nullzerorandomurandomttyconsole等必要设备节点。/proc和/sys的挂载必须在新的PID命名空间生效后进行以确保它们反映的是沙箱内的视图。设置资源限制将监督者进程自身以及后续所有子进程加入一个新的cgroup中并设置好内存、CPU、进程数等上限。加载Seccomp-BPF过滤器编译或加载预设的BPF规则通过prctl(PR_SET_SECCOMP SECCOMP_MODE_FILTER ...)为进程设置系统调用过滤器。这一步必须在最后、最关键的时刻进行因为设置Seccomp后很多用于搭建环境的系统调用如mountunshare也会被禁止。丢弃能力调用cap_set_proc()等接口丢弃进程持有的所有非必要能力。执行目标程序最后通过execve()系统调用将进程镜像替换为我们要运行的AI Agent解释器如Python和脚本。从此这个进程就在一个精心构建的牢笼中运行了。3.2 网络隔离策略详解网络是风险最高的出口之一。Sandlock通常提供几种网络模式完全禁用创建Network命名空间后不做任何配置。沙箱内没有任何网络设备socket调用会被Seccomp阻止或返回错误。最安全适用于纯离线计算场景。私有网络在沙箱内创建一个lo回环设备和一对veth虚拟网卡。veth的一端在沙箱内如eth0另一端在宿主机的某个网络命名空间或网桥上。宿主机可以配置iptables规则控制沙箱对外的访问例如只允许访问特定IP和端口。这种方式提供了灵活且受控的网络访问。共享网络不推荐让沙箱进程共享宿主机的Network命名空间。这几乎不提供网络隔离仅在其他层面如文件系统提供保护风险较高。一个常见的折中方案是允许沙箱访问网络但通过Seccomp白名单仅允许connect发起连接到几个预定义的可信地址和端口如特定的API端点并禁止accept监听端口、bind绑定端口等防止其变成服务器被外部连接。3.3 文件系统访问控制模型文件访问是另一个重点。Sandlock采用多层防御根文件系统隔离使用一个最小化的rootfs里面只有/bin/lib/usr等运行解释器和基础库所必需的文件。宿主机上的敏感目录/home/etc/var完全不可见。绑定挂载如果需要让AI Agent读写特定目录可以使用bind mount。例如将宿主机上的/path/to/workspace以只读(ro)或读写(rw)方式挂载到沙箱内的/workspace。这样AI代码的工作空间就被严格限制在了这一个目录内。用户权限结合User命名空间即使在沙箱内是root其对绑定挂载的宿主机目录的访问权限仍受宿主机文件本身的权限位基于映射后的宿主UID/GID控制。这意味着如果宿主机上的/path/to/workspace目录属于UID 1000且权限是750那么沙箱内进程即使uid 0也无法写入该目录除非目录权限允许。Seccomp补充在Seccomp规则中可以进一步限制文件相关的系统调用。例如可以禁止openat带有O_CREAT标志禁止创建新文件或者禁止unlink禁止删除文件。4. 实战部署构建与运行一个简易Sandlock理论说得再多不如动手一试。下面我们以一个极度简化的概念验证PoC脚本为例展示Sandlock核心思想的实现。请注意这是一个用于教育目的的示例生产环境应使用更成熟的项目如gVisorFirecracker或基于libseccomplibcap的完整封装库。4.1 环境准备与依赖检查首先你需要一个现代Linux发行版内核版本建议≥4.3以支持完整的User Namespace功能。通过以下命令检查必要支持# 检查内核是否支持命名空间和seccomp uname -r # 检查当前用户是否可以使用user namespace通常默认允许 cat /proc/sys/user/max_user_namespaces # 值应大于0如1024 # 检查seccomp支持 grep SECCOMP /boot/config-$(uname -r)我们的PoC脚本将用C语言编写因为它需要直接调用系统调用和libc包装函数。你需要安装gcc和libcap-dev用于能力操作。# 在Ubuntu/Debian上 sudo apt update sudo apt install gcc libcap-dev -y4.2 编写监督者程序创建一个名为sandlock_poc.c的文件。程序逻辑如下#define _GNU_SOURCE #include stdio.h #include stdlib.h #include unistd.h #include sched.h #include sys/wait.h #include sys/mount.h #include sys/prctl.h #include sys/capability.h #include sys/syscall.h #include linux/seccomp.h #include linux/filter.h #include linux/audit.h #include sys/ptrace.h #define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); } while (0) static int seccomp_filter() { // 一个极度严格的过滤器只允许exit read write rt_sigreturn struct sock_filter filter[] { BPF_STMT(BPF_LD | BPF_W | BPF_ABS (offsetof(struct seccomp_data arch))), BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K AUDIT_ARCH_X86_64 0 5), BPF_STMT(BPF_LD | BPF_W | BPF_ABS (offsetof(struct seccomp_data nr))), BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K __NR_exit 4 0), BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K __NR_exit_group 3 0), BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K __NR_read 2 0), BPF_JUMP(BPF_JMP | BPF_JEQ | BPF_K __NR_write 1 0), BPF_STMT(BPF_RET | BPF_K SECCOMP_RET_KILL_PROCESS), // 不允许则杀死进程 BPF_STMT(BPF_RET | BPF_K SECCOMP_RET_ALLOW), // 允许 }; struct sock_fprog prog { .len (unsigned short)(sizeof(filter) / sizeof(filter[0])), .filter filter }; if (prctl(PR_SET_SECCOMP SECCOMP_MODE_FILTER prog) -1) errExit(prctl-seccomp); return 0; } static void drop_capabilities(void) { cap_t caps cap_init(); // 获取一个空的能力集 if (caps NULL) errExit(cap_init); // 我们丢弃所有能力一个不留 if (cap_set_proc(caps) -1) errExit(cap_set_proc); cap_free(caps); } static int child_func(void *arg) { printf(Child PID inside sandbox: %ld\n (long)getpid()); // 1. 挂载/proc (在新的PID ns生效后) if (mount(proc /proc proc 0 NULL) -1) errExit(mount-proc); // 2. 切换根目录到一个临时目录这里用/tmp/rootfs举例需提前准备 // chroot(/tmp/rootfs); // chdir(/); // 3. 丢弃所有非必要能力 drop_capabilities(); // 4. 加载最严格的seccomp过滤器放在最后 seccomp_filter(); // 5. 执行目标AI Agent代码这里用/bin/sh演示实际是python等 char *child_args[] {/bin/sh NULL}; execve(child_args[0] child_args NULL); errExit(execve); // 如果execve失败 } #define STACK_SIZE (1024 * 1024) static char child_stack[STACK_SIZE]; int main(int argc char *argv[]) { printf(Parent PID: %ld\n (long)getpid()); // 使用clone创建子进程并传入多个命名空间标志 // CLONE_NEWPID: PID命名空间 // CLONE_NEWNS: Mount命名空间必须单独传 // CLONE_NEWUTS: UTS命名空间 // CLONE_NEWIPC: IPC命名空间 // CLONE_NEWNET: Network命名空间 // CLONE_NEWUSER: User命名空间 (关键) // SIGCHLD: 子进程退出时通知父进程 pid_t child_pid clone(child_func child_stack STACK_SIZE CLONE_NEWPID | CLONE_NEWNS | CLONE_NEWUTS | CLONE_NEWIPC | CLONE_NEWNET | CLONE_NEWUSER | SIGCHLD NULL); if (child_pid -1) errExit(clone); // 父进程配置子进程user namespace的uid/gid映射 // 需要写入 /proc/[child_pid]/uid_map 和 gid_map char map_path[256]; sprintf(map_path /proc/%ld/uid_map (long)child_pid); FILE *fp fopen(map_path w); if (fp NULL) errExit(fopen-uid_map); // 格式沙箱内起始UID 宿主机起始UID 映射范围 // 这里将沙箱内的UID 0映射到宿主机的当前用户UID fprintf(fp 0 %ld 1\n (long)getuid()); fclose(fp); sprintf(map_path /proc/%ld/gid_map (long)child_pid); fp fopen(map_path w); if (fp NULL) errExit(fopen-gid_map); fprintf(fp 0 %ld 1\n (long)getgid()); fclose(fp); waitpid(child_pid NULL 0); // 等待子进程结束 printf(Sandbox exited.\n); return 0; }4.3 准备最小化根文件系统为了测试我们需要一个简单的根文件系统。这里用BusyBox静态编译版来快速创建一个# 下载静态编译的BusyBox wget https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox chmod x busybox # 创建rootfs目录结构 mkdir -p /tmp/rootfs/{bin dev proc sys} cp busybox /tmp/rootfs/bin/ cd /tmp/rootfs/bin for cmd in $(./busybox --list); do ln -s busybox $cmd; done cd - # 创建必要的设备节点 sudo mknod /tmp/rootfs/dev/null c 1 3 sudo mknod /tmp/rootfs/dev/console c 5 1在child_func函数中取消注释chroot(/tmp/rootfs);和chdir(/);这两行。4.4 编译与运行测试# 编译PoC程序需要链接libcap库 gcc sandlock_poc.c -o sandlock_poc -lcap # 运行不需要root权限 ./sandlock_poc如果一切顺利你会看到父进程PID和子进程PID在沙箱内应该是1。然后进入一个被严格限制的shell。在这个shell里尝试执行一些命令# 在沙箱shell中执行 ls / # 可能只看到bin dev proc sys等 ps aux # 只能看到沙箱内的进程可能就一个sh ip addr # 可能显示只有lo设备或无网络 echo test /tmp/file # 可能失败因为/tmp目录不存在或只读 # 尝试危险操作 rm -rf / # 会被限制只能删除沙箱内的文件 curl google.com # 会被seccomp过滤器阻止read/write允许但socket不允许按CtrlD退出沙箱shell回到宿主机。注意事项这个PoC极其简陋缺少错误处理、完整的文件系统搭建、网络配置和更精细的Seccomp规则。生产级实现需要考虑更多边界情况例如/proc和/sys的挂载时机、信号处理、能力集的精细控制等。真正的Sandlock类工具如nsjailbubblewrap代码要复杂得多。5. 深入排查常见问题与安全加固在实际部署和使用类似Sandlock的沙箱时你会遇到各种问题。以下是一些典型场景及其排查思路。5.1 权限问题与User Namespace故障问题clone()调用失败返回EPERM权限不足。排查检查内核是否支持User Namespacecat /proc/sys/kernel/unprivileged_userns_clone如果是0则普通用户无法创建。需要临时启用sudo sysctl kernel.unprivileged_userns_clone1或使用sudo运行。检查/proc/sys/user/max_user_namespaces值是否耗尽了。某些发行版如CentOS 7默认禁用非特权User Namespace。可能需要内核引导参数user_namespace.enable1。加固即使启用也建议在监督者进程启动后立即丢弃所有能力包括CAP_SYS_ADMIN它允许绕过很多命名空间限制。5.2 Seccomp过滤器导致的崩溃问题沙箱内进程一启动就收到SIGSYS信号被杀死。排查使用strace跟踪沙箱进程在父进程中或在子进程execve前附加ptrace查看它启动时到底调用了哪些系统调用。你的Seccomp白名单可能漏掉了某个必要的调用比如brkmmapaccessarch_prctl等。一个黄金法则Seccomp过滤器应该是最后一道防线。在开发阶段可以先设置一个只记录违规但不阻止的过滤器使用SECCOMP_RET_TRACE或SECCOMP_RET_LOG运行所有测试用例收集完整的系统调用日志再基于此生成生产环境的拒绝规则。加固采用默认拒绝策略并确保白名单尽可能窄。对于像ioctl这样的通用调用可以结合参数检查通过BPF代码分析seccomp_data结构的args字段只允许特定的请求类型。5.3 文件系统泄漏或访问异常问题AI Agent无法访问预期的文件或者意外地访问到了宿主机的文件。排查检查绑定挂载的选项是否用了ro/rw源路径和目标路径是否正确在沙箱内执行mount命令查看挂载表确认视图是否如预期。检查文件权限结合User Namespace的映射确认宿主机文件的属主和权限是否允许沙箱内进程映射后的UID访问。确保在chroot或pivot_root之后当前工作目录chdir(/)到了新的根下避免通过相对路径逃逸。加固除了使用chroot更推荐pivot_root它提供了更好的隔离性。考虑使用overlayfs来创建一个可写的上层而底层镜像保持只读防止基础系统被篡改。5.4 网络不通或隔离失效问题沙箱内无法访问网络或者反而能访问到不该访问的宿主机服务。排查完全无网络检查Network命名空间是否成功创建。沙箱内ip link应该只有lo。私有网络不通检查vethpair是否创建正确宿主机端的veth是否加入了正确的网桥或配置了路由。检查宿主机的iptables/nftables规则是否阻止了转发或NAT。隔离失效如果采用共享网络模式隔离本就薄弱。检查Seccomp是否禁止了socket的某些协议族如AF_NETLINK或调用如bindaccept。加固优先使用无网络模式。如需网络采用私有网络宿主机防火墙严格限制的策略。在Seccomp层可以限制socket调用的domain参数例如只允许AF_INETIPv4和AF_INET6IPv6禁止AF_NETLINK与内核通信、AF_PACKET原始数据包。5.5 性能开销评估沙箱化必然带来开销主要来自系统调用拦截Seccomp-BPF过滤器对每个系统调用进行校验引入少量CPU周期开销。上下文切换在某些设计下系统调用可能需要陷入更外层的“哨兵”进程处理如gVisor开销较大。Sandlock基于Linux原生原语通常只有一次clone和execve的固定开销运行时开销很小。内存冗余每个沙箱可能有自己的一份库文件拷贝如果未使用共享/lib。对于AI Agent场景大部分开销在启动时。如果Agent是长时间运行的服务性能影响微乎其微。如果Agent是短命任务如函数即服务频繁创建销毁沙箱的开销需要评估可以考虑池化技术。6. 超越基础高级安全考量与演进方向基础的命名空间Seccompcgroups组合已经相当强大但面对高对抗性的环境或追求极致安全时还有更多工作要做。6.1 内核漏洞与纵深防御没有任何沙箱是绝对安全的其安全性最终依赖于Linux内核本身。历史上User Namespace和内核其他子系统曾多次出现提权漏洞。因此纵深防御至关重要保持内核更新及时修复安全漏洞。最小化攻击面在沙箱内使用sysctl或prctl禁用不需要的内核特性如禁止模块加载、禁止ptrace、禁用perf事件等。结合MAC与强制访问控制框架如SELinux或AppArmor结合。可以为沙箱进程分配一个特定的SELinux上下文或AppArmor配置文件进一步限制其行为即使突破了命名空间仍受MAC规则约束。监控与审计使用auditd系统记录沙箱进程的所有安全相关事件如违反Seccomp规则、能力使用尝试便于事后分析和入侵检测。6.2 与容器和微虚拟化的对比与传统容器DockerDocker也使用这些原语但它更侧重于应用打包和分发默认配置可能不够安全例如早期Docker默认以root运行。Sandlock的理念是提供一个默认拒绝、配置更显式、更专注于单进程不可信代码执行的轻量级方案。你可以把Sandlock看作是在手动打造一个比默认Docker容器更“紧”的隔离环境。与微虚拟机Firecracker gVisorFirecracker通过KVM创建真正的微型虚拟机隔离性最强硬件级但启动开销~125ms和内存开销5MB比Sandlock~1ms 1MB高。gVisor在用户空间实现了一个“内核”Sentry拦截所有系统调用并由Go语言实现处理。隔离性很好但系统调用性能开销较高尤其是文件I/O和网络。Sandlock性能开销最低隔离性依赖于宿主内核的完整性。适用于对性能极度敏感、信任内核且威胁模型主要是限制应用层代码如AI Agent而非抵御内核漏洞攻击的场景。6.3 在AI Agent平台中的集成实践在一个完整的AI Agent平台中Sandlock这类技术如何集成执行引擎平台会有一个“安全执行器”组件。当用户提交或平台生成一段需要执行的代码Python脚本、Shell命令等时执行器会动态创建一个Sandlock沙箱环境。策略中心根据代码的信任级别、任务类型计算/文件操作/网络访问从策略中心拉取对应的Seccomp配置文件、cgroup配额、文件系统挂载规则和网络策略。资源与输入输出将计算任务所需的代码、数据文件以只读或读写方式绑定挂载到沙箱内指定位置。将标准输入、输出、错误流重定向到平台进行捕获和日志记录。生命周期管理执行器监控沙箱进程的CPU、内存使用超限则通过cgroup终止。任务完成后清理沙箱所有资源。审计日志所有沙箱的创建、系统调用违规、资源超限事件都被记录用于安全分析和计费。这种设计使得平台可以安全地运行海量用户提交的、未经充分审计的AI代码成为AI即服务AIaaS或自动化工作流的核心安全基石。