Linux命名空间:网络命名空间是否可能在不与进程关联的情况下存在



ip netns/var/run/ns中创建对(命名的)网络命名空间的引用,可以很容易地跟踪。同样,也可以通过/proc/[pid]/ns/net来确定。然而,一些自定义程序可以创建一个网络ns,并将相应的inode保存在其他非常规位置。这可能会使我们很难确定是否有我们可以列出的净ns。

其次,unshare <cmd>在进程退出时破坏了网络ns,这很好。然而,即使在命令/进程退出之后,ip netns exec <netns> <cmd>也将保持ns。所以我相信,任何自定义程序都有可能做到这一点。

因此,问题是:一个自定义程序是否可能创建一个未命名的网络ns,并且它与任何进程都没有关联?

此外,考虑到我们不知道索引节点的路径,是否可以从用户空间中列出这样的(隐藏的)网络ns?(内核当然有一个网络ns的链接列表)一个代码片段会很有帮助。

是否可能是一个自定义程序创建了一个未命名的网络ns,并且它与任何进程都没有关联?

是的,这是可能的。根据Linux命名空间手册页(http://man7.org/linux/man-pages/man7/namespaces.7.html):

每个进程都有一个/proc/[pid]/ns/子目录,其中包含一个条目对于支持由setns(2)操作的每个命名空间:

将此目录中的一个文件绑定到文件系统中的其他位置保留pid指定的进程处于活动状态,即使当前处于命名空间终止。

关于另一个问题:

考虑到我们不知道inode的路径,有可能从用户空间中列出这样的(隐藏的)netns吗?

如果你考虑第一个问题中的上述引用,通过检查绑定路径,你应该能够找到那些隐藏的命名空间

最新更新