在网络命名空间内启动隔离命名空间

在网络命名空间内启动隔离命名空间

我已成功创建两个网络命名空间(ns1 和 ns2)并通过 veth 连接将它们连接起来。他们可以很好地互相 ping 通,甚至可以通过 ssh 连接到另一个(前提是我启动了 sshd)。

我现在想做的是在 ns1 内启动一些进程(假设是 vi),这些进程看不到或至少不能从 ns2 修改/终止。那可能吗?

我尝试使用

unshare -p vi

在 ns1 上,但在 ns2 上仍然可以杀死它。我可以理解它可以从全局/默认网络名称空间中杀死,因为它是从它派生的,但 ns2 不应该能够杀死 ns1 内的进程。至少这就是我想要实现的目标。任何帮助,将不胜感激。

答案1

关于 Linux 命名空间,您需要了解一些事情。

  1. 每个命名空间类型仅隔离一个特定的事物。例如,网络命名空间仅隔离网络。
  2. 许多名称空间类型都具有某种继承关系(网络名称空间在完全隔离方面并不常见)

如果您想阻止用户进程互相看到,那么该作业的工具就是“pid 命名空间”。

我建议您考虑类似 lxc 的东西,它使用不同的命名空间类型以及 cgroup 来生成隔离的环境。

答案2

Linux 网络命名空间与 Linux PID 命名空间不同,我们需要清楚地区分它们,因为它们隔离了完全不同的系统/操作系统资源集。

现在,据说流程加入或者重新关联具有命名空间,例如特定的网络命名空间和另一个特定的 PID 命名空间。一个进程总是与许多命名空间相关联,但仅与每种类型中的一个相关联(网络、挂载、PID、用户……)

当您谈论“杀死进程”时,这根本不适用于网络名称空间,因为网络命名空间提供 IP 堆栈、网络接口、地址配置、路由配置等的隔离

那么说到“看到”并杀死进程,这是一个访问权限和PID空间的问题,所以这与PID命名空间反而。 “看见”也可能与挂载命名空间当谈到看到他们时/proc

相关内容