问题标签 [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.
linux - `nsenter` 不显示相同的挂载命名空间
目标
我想创建一个文件夹,该文件夹对进程 A 和 B 可见,但对其他进程不可见。
解决方案
我发现mount namespace with unshare和nsenter可能是一个解决方案。
我用
然后在进程 A 中,使用
然后我使用进程 A 的挂载命名空间创建进程 B,使用nsenter
问题
但是,在进程 B 中,我看不到进程 A 在 my-tmp 目录上的挂载。我用 command 检查了它mount
。我在挂载的 my-tmp 目录中也看不到进程 A 写入的文件。
有人知道这里出了什么问题吗?
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处的代码但我无法让它手动工作