使用以下命令启动shell:
bwrap --unshare-pid --unshare-user --dev-bind / / bash
在主机上的另一个shell中,我们可以用lsns:看到这一点
4026532550 user 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532552 mnt 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532562 pid 2 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
命名空间中的lsns报告
4026531834 time 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531835 cgroup 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531838 uts 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531839 ipc 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026531992 net 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532550 user 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532552 mnt 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
4026532562 pid 3 1799976 user bwrap --unshare-pid --unshare-user --dev-bind / / bash
主要问题:
如何在与第一个shell相同的命名空间中启动第二个shell
奖励问题:
据我所知,还有一个由bubblewrap创建的中间命名空间(只有用户命名空间?(,在大多数情况下是
是否可以在bubblewrap创建的中间命名空间中启动shell
因为所有特权都已经被bubblewrap从中间命名空间中删除了,这会不会毫无用处?
其想法是,可以在中间命名空间的最终命名空间或的其他特权内容中进行进一步的装载/卸载
欢迎任何解决方案,最好使用起泡器,否则最好使用nsenter,但也可以使用PoC 的原始setns系统调用
请注意,bwrap不是setuid,我以无特权用户的身份启动bwrap,所有类型的命名空间都在内核中启用,并且它们作为无特权用户afaik 正常工作
根据这个问题https://github.com/containers/bubblewrap/issues/253,bubblewrap只能创建新的装载命名空间,因此到目前为止,仅使用bubblew说唱可能无法解决此问题
Bubblewrap在创建初始名称空间方面做得很好,配置简单而足够,如果它创建了无法以任何方式正确重新输入的名称空间,我可能可以修补Bubblew说唱,使其允许或完全放弃它,并根据Bubblew拉普做的大多数事情的方式编写自己的setns包装器
Flatpak使用bubblewrap并允许输入名称空间,检查bubblew说唱是否创建了一个中间名称空间,我试图理解https://github.com/flatpak/flatpak/blob/4735e3ea90d9cfa7237aa1de7818ba396a45f084/app/flatpak-builtins-enter.c但我无法手动操作
像这样:
nsenter -U --preserve-credentials -m -p -t 1799976
其中1799976
是当前位于该命名空间中的进程的PID。如果不想输入mount或PID名称空间,请分别关闭-m
或-p
。