使用 Bindfs 和 chroot 时,我遇到了一个特殊问题(可能是个错误)。我创建了一个示例 sandbox 目录,其中包含 nodejs 及其所有依赖项,以便能够在chroot jail中运行。
好吧,我所做的是创建一个临时目录,在其中我从示例沙箱中挂载以下目录
要安装我的目录,我使用 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容器或虚拟机或任何其他替代技术用于我想要使用的技术。
答案 0 :(得分:1)
我发现:new-sandbox
只对其创建者有权限(这就是Python在使用tempfile.mkdtemp
时所做的)。
因此,允许其他人和组在该目录中读取和执行可以解决问题。