Linux命名空间简述

Linux命名空间机制通过隔离进程资源,实现容器虚拟化的关键。它包括IPC、Network、Mount、PID等多个类别,允许进程拥有独立的视图。创建命名空间可通过clone、setns或unshare命令,而在系统服务中,如Docker或系统服务启动时,会自动创建独立的命名空间,增强资源安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、命名空间简介

二、命名空间分类

三、如何创建命名空间

四、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 目录,达到不与其他进程共享的目的。

这样做虽然增加了临时文件的安全性,但是进程就无法通过/tmp或/var/tmp目录下的文件通信了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值