【问题标题】:Prevent child process from system calls防止子进程进行系统调用
【发布时间】:2010-10-10 12:45:09
【问题描述】:

我想创建一个调用另一个程序的子进程(在 Unix 中使用 C++)。但是我想限制子进程不调用system()、fopen()等(如果调用了就终止)。

怎么做?

【问题讨论】:

  • 我想为编程竞赛问题创建一个简单的个人评分器,所以如果解决方案调用system(),它会报告“非法系统调用”或类似的东西。
  • 如果我没记错的话,ejugde 是开源的。也许你可以看看那里是怎么做的?

标签: c++ unix process


【解决方案1】:

this 可能会对您有所帮助。似乎有一种方法可以通过 ptrace 处理子进程所做的不同事情。高温

【讨论】:

    【解决方案2】:

    假设您的子进程使用 C 库进行系统调用,它是一个动态可执行文件,并且您的系统使用 ELF,您可以将 LD_PRELOAD 设置为拦截您感兴趣的函数的库。

    如果做不到这一点,你可以做一个 Valgrind 工具。

    【讨论】:

      【解决方案3】:

      棘手。如果这是 Linux 或 BSD,您可以尝试使用 setrlimit(RLIMIT_NPROC, &lim)。如果子进程尝试创建进程,这不会终止子进程,但会导致对fork 的系统调用失败。不知道是否有更便携的答案。

      【讨论】:

      • @Peter - 嗯,是的,这也是一个安全漏洞。 Armen 的答案可能更好(假设它适用于要使用的操作系统)。
      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 2013-05-20
      • 2013-08-26
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多