杀死进程和所有后代的安全方法

时间:2012-11-06 23:53:17

标签: linux security ubuntu kernel kill

我正在Linux中使用apparmorsetrlimitcap_set_rpoc创建一个沙箱环​​境,让匿名用户在科学应用程序的上下文中基本上在我的服务器上执行一些任意代码。沙盒中特别允许的一件事是通过分叉和调用可执行文件来启动新进程(尽管一个用户的进程总数受RLIMIT_NPROC限制。)

在给定的时间段后,比如1分钟,系统将杀死主进程和所有潜在的子进程。我目前依靠进程组ID来识别孩子。但是,从理论上讲,子进程可以调用setpgid来更改其进程组,这样当我在主进程ID上调用kill(-1 * pid)时它就不再受影响了(正确吗?)。不幸的是,我没有设置linux capability来阻止进程调用setpgid

杀死一个进程及其所有(递归)孩子的强大方法是什么,这会让孩子们很难以某种方式“逃离”大屠杀并继续作为孤儿进程?

1 个答案:

答案 0 :(得分:1)

如果使用lxc(Linux容器)隔离每个进程树,则可以使用lxc-stop来终止容器中的所有进程。请参阅lxc manual page的“启动/停止容器”部分。