我想知道Linux内核中“命名空间支持”功能究竟是什么意思.我正在使用内核3.11.1(此时最新的稳定内核).

如果我决定禁用它,我会注意到我的系统有任何变化吗?

如果某人决定使用命名空间,只需在内核中编译NAMESPACES = Y,还是他还需要用户空间工具?

解决方法:


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

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

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

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

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

仍然很少有应用程序使用命名空间.以下是一些:

LXC已经成熟.它依靠cgroups提供容器.
virt-sandbox是最近的沙盒项目.
Chromium的最新版本还在可用的沙盒中使用名称空间.
用于集群应用程序uses namespacesuWSGI框架,用于改进沙盒.

有关更多信息,请参见the LWN article series by Michael Kerrisk.

标签: linux, namespace, linux-kernel

相关文章推荐

添加新评论,含*的栏目为必填