防止子进程进行系统调用

4
我希望创建一个调用另一个程序的子进程(在Unix中使用C++)。但我想限制子进程不要调用system(),fopen()等函数(如果它这样做了,将被终止)。
如何实现呢?

我想创建一个简单且个人化的编程竞赛问题评分器,因此如果解决方案调用system()函数,它将报告“非法系统调用”或类似的内容。 - fushar
1
如果我没搞错的话,ejudge是开源的。也许你可以看看它是怎么做的? - Armen Tsirunyan
3个回答

2

这个链接可能会对你有所帮助。看起来可以通过ptrace处理子进程的不同操作。祝你好运。


1
假设您的子进程使用C库来执行系统调用,它是一个动态可执行文件,并且您的系统使用ELF格式,那么您可以将LD_PRELOAD设置为一个拦截您感兴趣的函数的库。
如果无法实现上述方法,您可以使用Valgrind工具。

0

有点棘手。如果这是Linux或BSD,您可以尝试使用setrlimit(RLIMIT_NPROC,&lim)进行实验。这不会在子进程尝试创建进程时终止它,但它会导致系统调用fork失败。不知道是否有更多可移植的答案。


@Peter - 嗯,是的,那也会是一个安全漏洞。Armen的答案可能更好(假设它适用于要使用的操作系统)。 - aschepler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接