我正在编写一个产生子进程的程序。出于安全原因,我想限制这些进程可以做什么。我知道来自程序外部的安全措施,例如chroot
or ulimit
,但我想做更多的事情。我想限制子进程完成的系统调用(例如防止调用open()
,fork()
等等)。有没有办法做到这一点?最理想的情况是,被阻塞的系统调用应该返回一个错误,但如果这是不可能的,那么终止进程也是好的。
我想它可以做到,但从ptrace()
手册页我真的不明白如何使用它来达到这个目的。
我正在编写一个产生子进程的程序。出于安全原因,我想限制这些进程可以做什么。我知道来自程序外部的安全措施,例如chroot
or ulimit
,但我想做更多的事情。我想限制子进程完成的系统调用(例如防止调用open()
,fork()
等等)。有没有办法做到这一点?最理想的情况是,被阻塞的系统调用应该返回一个错误,但如果这是不可能的,那么终止进程也是好的。
我想它可以做到,但从ptrace()
手册页我真的不明白如何使用它来达到这个目的。
听起来SECCOMP_FILTER是在内核版本 3.5 中添加的,是您所追求的。该libseccomp
库为此功能提供了一个易于使用的 API。
顺便说一句,chroot()
这setrlimit()
两个系统调用都可以在您的程序中调用 - 除了 seccomp 过滤之外,您可能还想使用其中一个或两个。
如果你想这样做ptrace
,你有一些选择(有些非常简单)。首先,我建议您按照此处解释的教程进行操作。有了它,您可以了解如何知道正在调用哪些系统调用,以及基本ptrace
知识(不用担心,这是一个非常简短的教程)。您拥有的选项(我知道)如下:
PTRACE_SETREGS
,将错误的值放入其中,并且您还可以根据需要更改系统调用的返回值(再次,使用PTRACE_SETREGS
)。PTRACE_SETREGS
)。