目录
一、命名空间简介
二、命名空间分类
三、如何创建命名空间
四、Linux可以自动为系统服务创建独立的命名空间
一、命名空间简介
在传统的LIinux系统上,系统资源都是全局的,比如pid、文件、网络等,为了支持容器虚拟化,Linux内核有NameSpace机制,它可以把一组进程的资源隔离起来,比如使用将进程自己的文件映射到特定目录下,不与其他命名空间下的进程共享。
二、命名空间分类
Linux的NameSpace主要分为以下几种:
1、IPC:从2.6.19内核开始,IPC NameSpace用于隔离进程间通讯所需的资源,PID命名空间和IPC命名空间可以组合起来用,只有同一个IPC NameSpace内的进程才进行交互,不同空间进程无法交互;
2、Network:从2.6.24内核开始,Network Namespace为进程提供了一个完全独立的网络协议栈的视图。包括网络设备接口,IPv4和IPv6协议栈,IP路由表,防火墙规则,sockets等等。一个Network Namespace提供了一份独立的网络环境,就跟一个独立的系统一样。
3、Mount:从2.4.19内核开始,每个进程都存在于一个mount Namespace里面,mount Namespace为进程提供了一个文件层次视图。如果不设定这个flag,子进程和父进程将共享一个mount Namespace,其后子进程调用mount或umount将会影响到所有该Namespace内的进程。如果子进程在一个独立的mount Namespace里面,就可以调用mount或umount建立一份新的文件层次视图。
4、PID:从2.6.24内核开始,同一个进程,在不同的命名空间进程号不同,进程命名空间是一个父子结构,子空间对于父空间可见。
5、Use:从2.6.23开始,到3.8版本不再支持,用于隔离用户信息;
6、UTS:从2.6.19内核开始,全称是Unix Timesharing system,包含了运行内核的名称、版本、底层体系结构类型等信。
三、如何创建命名空间
创建一个新的命名空间有以下几种办法:
1、在clone新进程时指定CLONE_NEWPID/CLONE_NEWIPC/CLONE_NEWNS/CLONE_NEWUSER/CLONE_NEWUTS等就能为进程创建新的对应类型的命名空间;
2、setns可以切换进程的命名空间;
3、使用unshared命令,也可以用进程创建新的命名空间;
查看进程所属的命名空间可以使用cat /proc/pid/ns
四、Linux可以自动为系统服务创建独立的命名空间
一般大家都认为在容器环境下,比如docker内才容易出现进程切换到新的命名空间,其实正常情况虚拟机也是会出现的,当我们以系统服务启动某个程序时,需要为该程序配置service文件,其中有这样一个配置项:
#[Service]部分:指定启动行为,包括Type、EnvironmentFile、ExecStart、ExecReload、ExecStop、PrivateTmp。
[Service]
PrivateTmp=true
当PrivateTmp设置为true时,会为该进程创建新的Mount NameSpace,然后在新的命名空间中挂载私有的 /tmp 与 /var/tmp 目录,达到不与其他进程共享的目的。文章来源:https://www.toymoban.com/news/detail-464775.html
这样做虽然增加了临时文件的安全性,但是进程就无法通过/tmp或/var/tmp目录下的文件通信了。文章来源地址https://www.toymoban.com/news/detail-464775.html
到了这里,关于Linux命名空间简述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!