克隆:操作不允许

我正在使用隔离器,隔离器来隔离使用Linux容器的另一个程序的执行。 它非常方便,在我的计算机上运行得非常好(我可以运行叉炸弹和无限循环,并保护所有内容)。

现在我试图让这个在我的Ubuntu 12.04服务器上工作,但是我遇到了一些困难。 这也是一个新鲜的服务器。

当我运行:

sudo isolate --run -- mycommand

mycommand我通常尝试python3或什么的),我得到:

clone: Operation not permitted

所以,我挖了克隆function(在isolate.c这样isolate.c ):

 box_pid = clone( box_inside, // Function to execute as the body of the new process argv, // Pass our stack SIGCHLD | CLONE_NEWIPC | CLONE_NEWNET | CLONE_NEWNS | CLONE_NEWPID, argv); // Pass the arguments if (box_pid < 0) die("clone: %m"); if (!box_pid) die("clone returned 0"); box_keeper(); 

以下是函数clone的返回值:

成功时,subprocess的线程ID在调用者的执行线程中返回。 失败时,在调用者的上下文中返回-1,不会创buildsubprocess,并且将适当地设置errno。

这是我得到的错误:

EPERM不允许操作(POSIX.1)

然后我也发现这个:

EPERM CLONE_NEWNS是由非根进程(没有CAP_SYS_ADMIN的进程)指定的。

clone函数确实是通过CLONE_NEWNS在新的名称空间中运行程序。 我其实尝试删除,但我一直在clone: Operation not permitted

所以,这一切似乎都指出没有root权限,但我实际上运行命令作为root (有和没有sudo只是为了肯定),并与sudoers组中的普通用户。 没有一个工作,但它在当地很好。 根特权适用于其他任何事情,但由于某种原因,当我运行这个isolate程序,它不起作用。

我试着用/usr/bin isolate文件在本地文件夹中运行./isolate

我有这个问题,因为我试图在Docker容器中使用隔离。

--privileged标志重新运行容器为我解决了这个问题。