【问题标题】:Linux Namespaces: Is it possible for a network namespace to exist without being associated with a process?Linux 命名空间:网络命名空间是否可以在不与进程关联的情况下存在?
【发布时间】:2016-01-01 22:57:31
【问题描述】:

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

其次,unshare <cmd>在进程退出时销毁net ns,这很好。但是,ip netns exec <netns> <cmd> 即使在命令/进程退出后也会保留 ns。所以我相信,任何自定义程序都可以做到这一点。

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

此外,如果我们不知道到 inode 的路径,是否可以从用户空间列出这样的(隐藏的)网络 ns? (内核当然有net ns的链表)一段代码sn -p会很有帮助。

【问题讨论】:

  • 希望得到更多回复。任何人?谢谢!

标签: networking linux-kernel docker lxc linux-containers


【解决方案1】:

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

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

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

将此目录中的文件之一绑定到挂载(参见 mount(2)) 文件系统中的其他地方保留了相应的命名空间 由 pid alive 指定的进程,即使当前所有进程都在 命名空间终止。

关于另一个问题:

鉴于我们不知道到 inode 的路径,是否可以从用户空间列出此类(隐藏的)网络 ns?

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

【讨论】:

  • /proc/ 中的绑定路径特定于故意创建它的 netns 实用程序。如果你创建一个 net ns,比如说用 C 程序,你如何跟踪它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2020-02-19
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多