我正在写一个产生subprocess的程序。 出于安全原因,我想限制这些进程可以做什么。 我知道程序之外的安全措施,比如chroot
或ulimit
,但是我想做更多的事情。 我想限制subprocess完成的系统调用(例如阻止调用open()
, fork()
等)。 有没有办法做到这一点? 最好是阻塞的系统调用应该返回一个错误,但如果这是不可能的,那么杀死进程也是好的。
我想这可以做ptrce ptrace()
但从手册页,我真的不明白如何使用它的目的。
如果你想这样做,你有一些选择(有些是非常简单的)。 首先,我建议你按照这里解释的教程。 有了它,你可以学习如何知道系统调用被调用,以及基本的ptrace
知识(不用担心,这是一个非常简短的教程)。 我知道的选项有以下几种:
PTRACE_SETREGS
改变寄存器,在其中输入错误的值,如果你愿意(也可以使用PTRACE_SETREGS
),你也可以改变系统调用的返回值。 PTRACE_SETREGS
)。 这听起来像SECCOMP_FILTER ,在内核版本3.5中添加,是你所追求的。 libseccomp
库为此功能提供了一个易于使用的API。
顺便说一句, chroot()
和setrlimit()
都是可以在程序中调用的系统调用 – 除了seccomp过滤之外,您可能还想使用其中的一个或两个。