内核:命名空间支持


15

我想知道Linux内核中“命名空间支持”功能到底意味着什么。我正在使用内核3.11.1(当前最新的稳定内核)。

如果我决定禁用它,我是否会注意到系统上的任何更改?

如果有人决定使用名称空间,仅NAMESPACES=Y在内核中进行编译就足够了吗,还是他还需要用户空间工具?


5
命名空间的解释相当不错的位置:lwn.net/Articles/531114(不是一个答案,因为我真的不回答你的问题-我指点你一堆文本)
derobert

Answers:


21

简而言之,名称空间提供了在大型Linux系统中构建虚拟Linux系统的方法。这与运行以非特权进程运行的虚拟机不同:虚拟机在主机中显示为单个进程,而在名称空间内运行的进程仍在主机系统上运行。

在大型系统中运行的虚拟系统称为容器。容器的概念是,容器内运行的进程认为它们是系统中唯一的进程。特别是,容器内的root用户在容器外没有root特权(请注意,这仅在内核的最新版本中才适用)。

命名空间一次虚拟化一个功能。命名空间类型的一些示例是:

  • 用户名称空间 -这使进程可以像在名称空间内外以不同用户身份运行一样。特别是,在名称空间内以UID 0运行的进程仅具有相对于在相同名称空间中运行的进程的超级用户特权。
    从Linux内核3.8开始,非特权用户可以创建用户名称空间。这使普通用户可以使用保留给root用户的功能(例如更改路由表或设置功能)。
  • PID名称空间-PID名称空间内的进程无法杀死或跟踪该名称空间外的进程。
  • 挂载名称空间 -这允许进程拥有自己的文件系统视图。该视图可以是局部视图,从而可以隐藏文件系统的某些部分并进行重新组合,以便目录树出现在不同的位置。挂载名称空间概括了传统的Unix功能chroot,它允许将进程限制为特定的子树。
  • 网络名称空间 -允许分离网络资源(网络设备),从而增强进程的隔离性。

命名空间依靠内核来提供命名空间之间的隔离。要解决这个问题非常复杂,因此可能仍然存在安全漏洞。安全漏洞的风险将是不启用该功能的主要原因。另一个不启用它的原因是在为嵌入式设备制作小型内核时。在要安装在典型服务器或工作站上的通用内核中,应启用名称空间,就像其他任何成熟的内核功能一样。

仍然很少有使用名称空间的应用程序。这里有一些:

有关更多信息,请参阅Michael Kerrisk的LWN文章系列


6

Linux内核名称空间是一个概念,用于将一组进程与其他进程隔离,以访问系统资源。例如,两个不同的PID名称空间可能包含具有相同PID但完全不同的进程映像的进程。它们通常用于OS级虚拟化,其中单个内核同时运行各种操作系统-所有内核都必须基于Linux(显然,因为它们共享内核),但是可能具有不同的发行版和版本。参见例如LXC

您可能会注意到例如在基于systemd的系统上将其禁用,因为systemd能够为其容器功能使用名称空间。因此,很大程度上取决于您使用的发行版以及打算对系统进行什么处理。

与几乎所有内核功能一样,您肯定需要某种用户空间程序-即使您通过特殊文件与内核进行了交谈(我不确定也可以),通常依靠更好的工具还是个好主意,因为它们提供最友好的API。


1

在支持SELinux(MLS或Strict)的系统中,举一个命名空间用法的例子。命名空间通常用于创建个人/tmp和或/home每个用户的目录。这些目录仅对以下用户可见:用户,具有相同标签的用户,内核和具有特权访问权限的用户。以名称空间命名的/tmp目录被SELinux-MLS标记,以匹配用户的SELinux-MLS标签。在这种情况下/tmp,用户看到的目录可能确实安装在/tmp/var/user-tmp)以外的其他位置。但是,用户只能看到/tmp由于用户的活动而创建的文件。用户将永远不会看到/tmp其他用户产品中的任何文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.