中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux支持幾種Namespace

發布時間:2021-11-26 11:37:14 來源:億速云 閱讀:174 作者:小新 欄目:大數據

這篇文章給大家分享的是有關Linux支持幾種Namespace的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

目前Linux內核總共支持以下6種Namespace:

  • IPC:隔離System V IPC和POSIX消息隊列。

  • Network:隔離網絡資源。

  • Mount:隔離文件系統掛載點。

  • PID:隔離進程ID。

  • UTS:隔離主機名和域名。

  • User:隔離用戶ID和組ID。

Linux對Namespace的操作,主要是通過clone、setns和unshare這3個系統調用來完成的,clone創建新進程時,接收一個叫flags的參數,這些flag包括CLONE_NEWNS、CLONE_NEWIPC、CLONE_NEWUTS、CLONE_NEWNET(Mount namespace)、CLONE_NEWPIDCLONE_NEWUSER,用于創建新的namespace,這樣clone創建出來新進程之后就屬于新的namespace了,后續新進程創建的進程默認屬于同一namespace。

如果想要給已存在進程設置新的namespace,可通過unshare函數(long unshare(unsigned long flags))完成設置,其入參flags表示新的namespace。當想要給已存在進程設置已存在的namespace,可通過setns函數(int setns(int fd, int nstype))來完成設置,每個進程在procfs目錄下存儲其相關的namespace信息,可找到已存在的namesapce,然后通過setns設置即可:

[root@centos ~]# ls -l /proc/10401/ns
總用量 0
lrwxrwxrwx 1 root root 0 1月  12 11:36 ipc -> ipc:[4026531839]
lrwxrwxrwx 1 root root 0 1月  12 11:36 mnt -> mnt:[4026531840]
lrwxrwxrwx 1 root root 0 1月  12 11:36 net -> net:[4026531956]
lrwxrwxrwx 1 root root 0 1月  12 11:36 pid -> pid:[4026531836]
lrwxrwxrwx 1 root root 0 1月  12 11:36 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 1月  12 11:36 uts -> uts:[4026531838]
 

上述每個虛擬文件對應該進程所處的namespace,如果其他進程想進入該namespace,open該虛擬文件獲取到fd,然后傳給setns函數的fd入參即可,注意虛擬文件type和nstype要對應上。

目前Linux內核總共支持以下6種Namespace,分別是IPC、Network、Mount、PID、UTS、User

 

IPC

IPC也就是進程間通信,Linux下有多種進程間通信,比如socket、共享內存、Posix消息隊列和SystemV IPC等,這里的IPC namespace針對的是SystemV IPC和Posix消息隊列,其會用標識符表示不同的消息隊列,進程間通過找到標識符對應的消息隊列來完成通信,IPC namespace做的事情就是相同的標識符在不同namespace上對應不同的消息隊列,這樣不同namespace的進程無法完成進程間通信。

 

Network

Network Namespace隔離網絡資源,每個Network Namespace都有自己的網絡設備、IP地址、路由表、/proc/net目錄、端口號等。每個Network Namespace會有一個loopback設備(除此之外不會有任何其他網絡設備)。因此用戶需要在這里面做自己的網絡配置。IP工具已經支持Network Namespace,可以通過它來為新的Network Namespace配置網絡功能。

 

Mount

Mount namesapce用戶隔離文件系統掛載點,每個進程能看到的文件系統都記錄在/proc/xx/mounts里。在創建了一個新的Mount Namespace后,進程系統對文件系統掛載/卸載的動作就不會影響到其他Namespace。

 

PID

PID Namespace用于隔離進程PID號,這樣一來,不同的Namespace里的進程PID號就可以是一樣的了。當創建一個PID Namespace時,第一個進程的PID號是1,也就是init進程。init進程有一些特殊之處,例如init進程需要負責回收所有孤兒進程的資源。另外,發送給init進程的任何信號都會被屏蔽,即使發送的是SIGKILL信號,也就是說,在容器內無法“殺死”init進程。

注意,但是當用ps命令查看系統的進程時,會發現竟然可以看到host的所有進程:

Linux支持幾種Namespace

這是因為ps命令是從procfs讀取信息的,而procfs并沒有得到隔離。雖然能看到這些進程,但由于它們其實是在另一個PID Namespace中,因此無法向這些進程發送信號。

 

UTS

UTS Namespace用于對主機名和域名進行隔離,也就是uname系統調用使用的結構體structutsname里的nodename和domainname這兩個字段,UTS這個名字也是由此而來的。為什么需要uts namespace呢,因為為主機名可以用來代替IP地址,比如局域網通過主機名訪問機器。

 

User

User Namespace用來隔離用戶資源,比如一個進程在Namespace里的用戶和組ID與它在host里的ID可以不一樣,這樣可以做到,一個host的普通用戶可以在該容器(user namespace)下擁有root權限,但是它的特權被限定在容器內。(容器內的這類root用戶,實際上還是有很多特權操作不能執行,基本上如果這個特權操作會影響到其他容器或者host,就不會被允許)

感謝各位的閱讀!關于“Linux支持幾種Namespace”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜都市| 河池市| 马尔康县| 和硕县| 湖北省| 博客| 和龙市| 定日县| 沁水县| 辉县市| 连州市| 荥经县| 平塘县| 龙川县| 渝北区| 沈阳市| 郴州市| 乌拉特后旗| 寻甸| 缙云县| 新蔡县| 财经| 东乌珠穆沁旗| 合川市| 建水县| 仲巴县| 涿州市| 通化市| 南汇区| 松江区| 太湖县| 普陀区| 曲沃县| 施秉县| 高邑县| 墨脱县| 蓬莱市| 五原县| 梧州市| 清水河县| 安顺市|