问题标签 [nsenter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
62 浏览

linux - `nsenter` 不显示相同的挂载命名空间

目标

我想创建一个文件夹,该文件夹对进程 A 和 B 可见,但对其他进程不可见。

解决方案

我发现mount namespace with unsharensenter可能是一个解决方案。

我用

然后在进程 A 中,使用

然后我使用进程 A 的挂载命名空间创建进程 B,使用nsenter

问题

但是,在进程 B 中,我看不到进程 A 在 my-tmp 目录上的挂载。我用 command 检查了它mount。我在挂载的 my-tmp 目录中也看不到进程 A 写入的文件。

有人知道这里出了什么问题吗?

0 投票
1 回答
29 浏览

linux-namespaces - 重用由bubblewrap启动的进程的命名空间

用这个启动一个shell:

在主机上的另一个 shell 中,我们可以使用 lsns 看到这一点:

命名空间报告中的 lsns

主要问题:

如何在与第一个相同的命名空间中启动第二个 shell?


奖金问题:

据我了解,在大多数情况下,bubblewrap 创建了一个中间命名空间(只有用户命名空间?)

是否可以在bubblewrap 创建的中间命名空间中启动一个shell?

它会因为所有权限都已被中间命名空间中的气泡包装删除而无用吗?

这个想法是进一步的挂载/卸载可以在中间命名空间的最终命名空间中完成,或者其他一些特权的东西


欢迎任何解决方案,最好使用bubblewrap,否则最好使用nsenter 以及用于PoC 的原始setns 系统调用

请注意,bwrap 不是 setuid,我以非特权用户身份启动 bwrap,内核中启用了所有类型的命名空间,并且它们作为非特权用户正常工作 afaik

根据这个问题https://github.com/containers/bubblewrap/issues/253,bubblewrap 只能创建新的挂载命名空间,所以这个问题目前可能无法仅使用bubblewrap 来解决

Bubblewrap 在创建初始命名空间、简单且足够的配置方面做得很好,如果它创建的命名空间无法以任何方式正确重新输入,我可能会修补 bubblewrap 以便允许它或完全放弃它并编写一个基于bubblewrap如何做大多数事情的自己的setns包装器

Flatpak 使用bubblewrap 并允许输入命名空间,检查bubblewrap 是否创建中间命名空间,我试图理解https://github.com/flatpak/flatpak/blob/4735e3ea90d9cfa7237aa1de7818ba396a45f084/app/flatpak-builtins-enter.c处的代码但我无法让它手动工作