Answers:
简而言之,名称空间提供了在大型Linux系统中构建虚拟Linux系统的方法。这与运行以非特权进程运行的虚拟机不同:虚拟机在主机中显示为单个进程,而在名称空间内运行的进程仍在主机系统上运行。
在大型系统中运行的虚拟系统称为容器。容器的概念是,容器内运行的进程认为它们是系统中唯一的进程。特别是,容器内的root用户在容器外没有root特权(请注意,这仅在内核的最新版本中才适用)。
命名空间一次虚拟化一个功能。命名空间类型的一些示例是:
命名空间依靠内核来提供命名空间之间的隔离。要解决这个问题非常复杂,因此可能仍然存在安全漏洞。安全漏洞的风险将是不启用该功能的主要原因。另一个不启用它的原因是在为嵌入式设备制作小型内核时。在要安装在典型服务器或工作站上的通用内核中,应启用名称空间,就像其他任何成熟的内核功能一样。
仍然很少有使用名称空间的应用程序。这里有一些:
有关更多信息,请参阅Michael Kerrisk的LWN文章系列。
Linux内核名称空间是一个概念,用于将一组进程与其他进程隔离,以访问系统资源。例如,两个不同的PID名称空间可能包含具有相同PID但完全不同的进程映像的进程。它们通常用于OS级虚拟化,其中单个内核同时运行各种操作系统-所有内核都必须基于Linux(显然,因为它们共享内核),但是可能具有不同的发行版和版本。参见例如LXC。
您可能会注意到例如在基于systemd的系统上将其禁用,因为systemd能够为其容器功能使用名称空间。因此,很大程度上取决于您使用的发行版以及打算对系统进行什么处理。
与几乎所有内核功能一样,您肯定需要某种用户空间程序-即使您通过特殊文件与内核进行了交谈(我不确定也可以),通常依靠更好的工具还是个好主意,因为它们提供最友好的API。
在支持SELinux(MLS或Strict)的系统中,举一个命名空间用法的例子。命名空间通常用于创建个人/tmp
和或/home
每个用户的目录。这些目录仅对以下用户可见:用户,具有相同标签的用户,内核和具有特权访问权限的用户。以名称空间命名的/tmp
目录被SELinux-MLS标记,以匹配用户的SELinux-MLS标签。在这种情况下/tmp
,用户看到的目录可能确实安装在/tmp
(/var/user-tmp
)以外的其他位置。但是,用户只能看到/tmp
由于用户的活动而创建的文件。用户将永远不会看到/tmp
其他用户产品中的任何文件。