Mar*_*ter 15 linux linux-kernel namespace
我想知道 Linux 内核中的“命名空间支持”功能到底是什么意思。我正在使用内核 3.11.1(目前最新的稳定内核)。
如果我决定禁用它,我会注意到我的系统有任何变化吗?
如果有人决定使用命名空间,仅NAMESPACES=Y
在内核中编译就足够了,还是他还需要用户空间工具?
Gil*_*il' 22
简而言之,命名空间提供了一种在更大的 Linux 系统中构建虚拟 Linux 系统的方法。这与运行作为非特权进程运行的虚拟机不同:虚拟机在主机中显示为单个进程,而在命名空间内运行的进程仍在主机系统上运行。
在更大的系统中运行的虚拟系统称为容器。容器的概念是运行在容器内的进程认为它们是系统中唯一的进程。特别是,容器内的 root 用户在容器外没有 root 权限(请注意,这仅适用于足够近的内核版本)。
命名空间一次虚拟化一个功能。命名空间类型的一些示例是:
命名空间依赖于内核来提供命名空间之间的隔离。要做到这一点非常复杂,因此可能仍然存在安全漏洞。安全漏洞的风险将是不启用该功能的主要原因。另一个不启用它的原因是当您为嵌入式设备制作小内核时。在安装在典型服务器或工作站上的通用内核中,应该启用命名空间,就像任何其他成熟的内核功能一样。
仍然很少有应用程序使用命名空间。以下是一些:
有关更多信息,请参阅Michael Kerrisk 的 LWN 文章系列。
Linux 内核命名空间是用于将一组进程与其他进程在访问系统资源方面隔离的概念。例如,两个不同的 PID 命名空间可能包含具有相同 PID 但进程映像完全不同的进程。它们通常用于操作系统级虚拟化,其中单个内核同时运行各种操作系统——所有操作系统都必须基于 Linux(因为它们显然共享内核),但可能是不同的发行版和版本。参见例如LXC。
例如,您可能会注意到在基于 systemd 的系统上禁用它,因为 systemd 能够为其容器功能使用命名空间。因此,很大程度上取决于您使用的是什么发行版以及您打算对系统做什么。
与几乎所有内核功能一样,您肯定需要某种用户空间程序 - 即使您通过特殊文件与内核进行通信(我不确定您是否可以),依赖专用工具通常是更好的主意,因为它们提供最友好的 API。