Linux之隔離技術

*一炁化三清*發表於2024-04-07

前言

Linux的核心有兩大特性Namespace和CGroup,這兩種特性可以在Linux主機上實現主機名、使用者、網路等全域性資源的隔離,也是實現網路虛擬化、容器技術的基礎。

名稱空間

Linux Namespace(名稱空間)是一種作業系統層級的資源隔離技術,能夠將 Linux 的全域性資源,劃分為 namespace 範圍內的資源,而且不同 namespace 間的資源彼此透明,不同 namespace 裡的程序無法感知到其它 namespace 裡面的程序和資源。

Namespace(名稱空間):實現六大名稱空間的隔離

Mount:根檔案系統隔離
UTS:主機名和域名隔離
IPC:容器程序間通訊隔離
USER:使用者隔離(UID對映)
PID:程序隔離
NETWORK:網路隔離

linux Namespaces機制提供一種資源隔離和虛擬化特性。PID,IPc,Network等系統資源不再是全域性性的,而是屬於某個特定的Namespace。每個namespace下的資源對於其他namespace下的資源都是不可見的。因此在作業系統層面上看,就會出現多個相同pid的程序。系統中可以同時存在兩個甚至多個程序號為0,1,2的程序由於屬於不同的namespace,所以它們之間並不衝突。而在使用者層面上只能看到屬於使用者自己namespace下的資源,例如使用ps命令只能列出自己namespace下的程序。這樣每個namespace看上去就像一個單獨的Linux系統。

這種隔離機制和 Chroot 很類似,Chroot 是把某個目錄修改為根目錄,從而無法訪問外部的內容。
Linux Namesapce 在此基礎之上,提供了對 UTS、IPC、Mount、PID、Network、User 等的隔離機制。
基本上涵蓋了一個小型作業系統的執行要素,包括主機名、使用者許可權、檔案系統、網路、程序號、程序間通訊。

CGroups(ControlGroups)
實現資源限制,限制容器內部程序可用的資源。

名稱 宏定義 隔離內容
Cgroup CLONE_NEWCGROUP Cgroup root directory (since Linux 4.6)
IPC CLONE_NEWIPC System V IPC, POSIX message queues (since Linux 2.6.19)
Network CLONE_NEWNET Network devices, stacks, ports, etc. (since Linux 2.6.24)
Mount CLONE_NEWNS Mount points (since Linux 2.4.19)
PID CLONE_NEWPID Process IDs (since Linux 2.6.24)
User CLONE_NEWUSER User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)
UTS CLONE_NEWUTS Hostname and NIS domain name (since Linux 2.6.19)

相關文章