1

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

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

  • 垃圾桶
  • 开发者
  • ETC
  • 包括
  • 库64
  • 执行程序
  • 用户

要挂载我的目录,我使用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是nobody的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 的文件夹,一切正常,即使以用户 nobody 执行也是如此。

您知道为什么会发生这种情况以及如何解决吗?非常感谢。

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

4

1 回答 1

1

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

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

于 2013-04-15T15:20:08.720 回答