chroot和bindfs的问题

时间:2013-04-15 14:49:19

标签: bind sandbox mount permission-denied chroot

使用 Bindfs chroot 时,我遇到了一个特殊问题(可能是个错误)。我创建了一个示例 sandbox 目录,其中包含 nodejs 及其所有依赖项,以便能够在chroot jail中运行。

好吧,我所做的是创建一个临时目录,在其中我从示例沙箱中挂载以下目录

  • dev的
  • 包括
  • LIB
  • lib64下
  • 的libexec
  • USR

要安装我的目录,我使用 bindfs ,使用以下命令模板

bindfs -u nobody -g nobody -p a-w:a+rx --chown-ignore --chgrp--ignore --chmod-ignore :sample-sandbox/:dir :new-sandbox/:dir

所以,我通过执行cd :new-sandbox转到上面的目录并执行以下命令(65534是没有人的uid)

chroot --userspec=65534 . node

我收到以下错误回复

chroot: failed to run command `node': Permission denied

当我运行chroot . node时,我得到了节点控制台,就像我应该的那样。有趣的是,当我在目录中运行ls时,我得到以下响应,表明文件和文件夹归用户nobody所有(正如我在bindfs命令中声明的那样)。

total 32
dr-xr-xr-x 4 nobody nobody 4096 Apr 15 12:46 bin
dr-xr-xr-x 2 nobody nobody 4096 Apr 10 14:56 dev
dr-xr-xr-x 2 nobody nobody 4096 Apr 15 16:33 etc
dr-xr-xr-x 5 nobody nobody 4096 Apr 12 02:21 include
dr-xr-xr-x 9 nobody nobody 4096 Apr 12 02:21 lib
dr-xr-xr-x 4 nobody nobody 4096 Apr 12 02:22 lib64
dr-xr-xr-x 3 nobody nobody 4096 Apr 12 02:22 libexec
dr-xr-xr-x 6 nobody nobody 4096 Apr 12 02:22 usr

当我尝试在原型沙箱中进行相同操作时,其中包含原始文件夹而不是使用bindfs安装的文件夹,所有内容都可以正常运行,即使以无人用户身份执行也是如此。

您是否知道为什么会发生这种情况以及如何解决这个问题?非常感谢你。

P.S。请不要提示我将Linux容器或虚拟机或任何其他替代技术用于我想要使用的技术。

1 个答案:

答案 0 :(得分:1)

我发现:new-sandbox只对其创建者有权限(这就是Python在使用tempfile.mkdtemp时所做的)。

因此,允许其他人和组在该目录中读取和执行可以解决问题。