克隆:不允许操作

时间:2014-03-27 12:02:42

标签: linux root sudo

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

现在我试图在我拥有的Ubuntu 12.04服务器上运行它,但是我遇到了一些困难。它也是一台新服务器。

当我跑步时:

sudo isolate --run -- mycommand

mycommand我通常会尝试python3或其他东西),我得到:

clone: Operation not permitted

所以,我挖掘了克隆函数(在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的返回值:

  

成功时,子进程的线程ID将在调用者的执行线程中返回。失败时,在调用者的上下文中返回-1,不会创建子进程,并且将正确设置errno。

这就是我得到的错误:

  

不允许EPERM操作(POSIX.1)

然后我也发现了这个:

  

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

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

所以,这一切似乎都指出没有root权限,但我实际上将命令作为root运行(有和没有sudo只是为了确定),还有普通用户在sudoers组。这些都不起作用,但它在当地非常有效。 Root权限适用于其他所有内容但由于某些原因,当我运行此isolate程序时,它不起作用。

我在isolate中同时使用/usr/bin并在本地文件夹中运行./isolate

2 个答案:

答案 0 :(得分:4)

我有这个问题,因为我试图在docker容器中使用isolate。

使用--privileged标记重新运行容器为我修复了它。

答案 1 :(得分:0)

您也可以将 --cap-add=SYS_ADMIN 传递给 docker run。 或者也--security-opt seccomp=unconfined 或者也提供您自己的允许系统调用的白名单,请参阅 https://docs.docker.com/engine/security/seccomp/#pass-a-profile-for-a-container