10

在 中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的链表)一段代码会很有帮助。

4

1 回答 1

1

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

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

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

将此目录中的文件之一绑定到文件系统中的其他位置(参见 mount(2))的挂载(参见 mount(2))保持由 pid 指定的进程的相应命名空间处于活动状态,即使当前在命名空间中的所有进程都终止。

关于另一个问题:

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

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

于 2016-01-08T14:02:56.730 回答