Linux内核 #2 Namespaces

本文最后更新于 2024年12月29日 晚上

What is Linux Namespaces?

​ Linux Namespaces 是一个 Linux 内核功能,用于划分内核资源。它允许进程看到不同的视图,隔离其在系统中的资源,使得它们的运行环境对外界看起来像是在独立的操作系统中。通过 namespace,多个进程可以在同一台物理机上共享资源的同时,实现进程间的隔离,从而提高系统的安全性、可管理性和可扩展性。

Linux 提供的命名空间

  • PID Namespace

    这样在不同的 PID Namespace 中,同样的 PID 可以对应不同的进程。例如,容器内的进程可以拥有 PID 1,但在宿主机上该 PID 可能是另一个进程。

  • Mount Namespace

    每个 Namespace 拥有独立的挂载点视图。通过这个 Namespace,容器或进程可以拥有自己独立的文件系统结构,避免与宿主机或其他容器共享文件系统。

  • Network Namespace

    将网络接口、IP 地址、路由表、端口等网络资源隔离到各个 Namespace 中。每个 Namespace 可以拥有独立的网络栈,从而实现独立的网络配置和通信。

  • IPC Namespace

    为不同的进程提供独立的 IPC(进程间通信)资源,如消息队列、共享内存和信号量。不同 Namespace 中的进程无法直接访问其他 Namespace 中的 IPC 资源。

  • UTS Namespace

    允许不同的 Namespace 中拥有独立的主机名(hostname)和域名(domain name)。这意味着每个容器或进程可以在其 Namespace 中设置不同的主机名,而不影响宿主机或其他容器。

  • User Namespace

    隔离不同 Namespace 中的用户和用户组 ID(UID 和 GID)。在同一个用户 Namespace 中,可以映射不同的用户 ID 和组 ID,从而使得容器内的进程以不同的权限运行,避免与宿主机上的用户 ID 冲突。

    用途: 容器运行时,通过 User Namespace 可以使容器内的用户以非特权用户身份运行,而不需要以 root 身份运行,从而增加安全性。

总结

Linux Namespaces 提供了一种轻量级的资源隔离机制,它是实现容器技术的基础。通过不同的 Namespace 类型,Linux 可以将进程、网络、文件系统、用户等资源进行有效的隔离,保证不同应用或服务之间的安全性和独立性。这种隔离机制在虚拟化、容器化以及多租户环境中具有广泛应用。


Linux内核 #2 Namespaces
http://blog.kdata.top/2024/12/28/计算机技术/Linux/Linux内核_2_Namespaces/
作者
Louis Liang
发布于
2024年12月28日
许可协议