我希望通过对启动的进程及其所有子进程(包括孙子等)进行
为了使
以下是我已经计划执行的内容:
ptrace()
处理来实现沙箱。 ptrace()
父进程即监督者将是一个简单的C或Python程序,概念上它将限制文件系统访问(基于路径名和访问方向(读取或写入))和套接字访问(例如禁止套接字创建)。为了使
ptrace()
处理的进程及其子进程(递归地)无法绕过沙箱,我应该注意什么?监督者在fork()
时是否需要特殊操作以避免竞争条件?是否可能在没有竞争条件的情况下从子进程中读取例如rename()
的文件名参数?以下是我已经计划执行的内容:
PTRACE_O_TRACEFORK | PTRACE_O_TRACEVFORK | PTRACE_O_TRACECLONE
以避免在fork()
时出现一些竞争条件- 默认情况下禁止所有系统调用,并组成允许的系统调用白名单
- 确保正确保护
*at()
系统调用变体(例如openat
)