通常来说,Namespace是个通用概念,我初次认识这个概念是在学习C++的时候,面向对象语言用它来命名冲突问题。这里, Namespace是指Linux用来控制一个进程对系统的可见性。最先的应用是chroot, 这里有介绍浅析chroot。chroot就是经过改变进程的fs_struct
,来限制进程可见的文件系统视图,默认状况下每一个进程能够看到整个文件系统,即根系统/
。最先Namespace应用于文件系统,以致于CLONE_NEWNS指的就是文件系统隔离,参见man namespaces
:linux
Mount namespaces (CLONE_NEWNS) Mount namespaces isolate the set of filesystem mount points, meaning that processes in different mount namespaces can have different views of the filesystem hierarchy.
后来,随着操做系统级别的虚拟化, 即容器技术,愈来愈多的子系统都支持了Namspace特性,参考man namespaces
:安全
Linux provides the following namespaces: Namespace Constant Isolates IPC CLONE_NEWIPC System V IPC, POSIX message queues Network CLONE_NEWNET Network devices, stacks, ports, etc. Mount CLONE_NEWNS Mount points PID CLONE_NEWPID Process IDs User CLONE_NEWUSER User and group IDs UTS CLONE_NEWUTS Hostname and NIS domain name
在没有了解Namespace之前,我有这些错误的见解:1. Namespace应该就像C++语言里的命名空间同样简单吧; 2. 听人说,容器/Namespace的隔离效果或安全性并很差,好比top命令仍能看到系统中的其它进程...dom
我真的错了,在玩了一下Namespace以后,我为它的强大感到震惊! 这里强烈推荐一个Namespace系列博客,很容易上手写点demo代码,快速体验一下, Introduce to Linux Namespaceside
我也不知道,可是分析这块代码应该分两步走:1. 分析clone()系统调用代码; 2. 分析某个子系统的Namespace, 如CLONE_NEWPID
进程pid的隔离。第一步,能够参考这系列博客fork,clone系统调用分析。 第二步,留待之后了解吧。学习