婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解Linux中的命名空間

詳解Linux中的命名空間

熱門標簽:營銷智能外呼系統口碑推薦 大連企業電銷機器人線路 優邁系統外呼顯示亂層 電銷機器人錄音用什么軟件 義烏市400電話辦理 布谷電銷機器人價格 上海電銷卡外呼系統供應商 怎么查看地圖標注的地點 岑溪電銷機器人

背景

從Linux 2.6.24版的內核開始,Linux 就支持6種不同類型的命名空間。它們的出現,使用戶創建的進程能夠與系統分離得更加徹底,從而不需要使用更多的底層虛擬化技術。

  •     CLONE_NEWIPC: 進程間通信(IPC)的命名空間,可以將 SystemV 的 IPC 和 POSIX 的消息隊列獨立出來。
        CLONE_NEWPID: 進程命名空間。空間內的PID 是獨立分配的,意思就是命名空間內的虛擬 PID 可能會與命名空間外的 PID 相沖突,于是命名空間內的 PID 映射到命名空間外時會使用另外一個 PID。比如說,命名空間內第一個 PID 為1,而在命名空間外就是該 PID 已被 init 進程所使用。
        CLONE_NEWNET: 網絡命名空間,用于隔離網絡資源(/proc/net、IP 地址、網卡、路由等)。后臺進程可以運行在不同命名空間內的相同端口上,用戶還可以虛擬出一塊網卡。
        CLONE_NEWNS: 掛載命名空間,進程運行時可以將掛載點與系統分離,使用這個功能時,我們可以達到 chroot 的功能,而在安全性方面比 chroot 更高。
        CLONE_NEWUTS: UTS 命名空間,主要目的是獨立出主機名和網絡信息服務(NIS)。
        CLONE_NEWUSER: 用戶命名空間,同進程 ID 一樣,用戶 ID 和組 ID 在命名空間內外是不一樣的,并且在不同命名空間內可以存在相同的 ID。

下面我們介紹一下進程命名空間和網絡命名空間。
進程命名空間

本文用 C 語言介紹上述概念,因為演示進程命名空間的時候需要用到 C 語言。下面的測試過程在 Debian 6 和 Debian 7 上執行。首先,在棧內分配一頁內存空間,并將指針指向內存頁的末尾。這里我們使用 alloca() 函數來分配內存,不要用 malloc() 函數,它會把內存分配在堆上。

   

復制代碼
代碼如下:
void *mem = alloca(sysconf(_SC_PAGESIZE)) + sysconf(_SC_PAGESIZE);

然后使用 clone() 函數創建子進程,傳入我們的子棧空間地址 "mem",并指定命名空間的標記。同時我們還指定“callee”作為子進程運行的函數。

   

復制代碼
代碼如下:
mypid = clone(callee, mem, SIGCHLD | CLONE_NEWIPC | CLONE_NEWPID | CLONE_NEWNS | CLONE_FILES, NULL);

clone 之后我們要在父進程中等待子進程先退出,否則的話,父進程會繼續運行下去,并馬上進程結束,留下子進程變成孤兒進程:

   

復制代碼
代碼如下:
while (waitpid(mypid, r, 0) 0 errno == EINTR)
{
continue;
}

最后當子進程退出后,我們會回到 shell 界面,并返回子進程的退出碼。

   

復制代碼
代碼如下:
if (WIFEXITED(r))
{
return WEXITSTATUS(r);
}
return EXIT_FAILURE;

上文介紹的 callee 函數功能如下:

   

復制代碼
代碼如下:
static int callee()
{
int ret;
mount("proc", "/proc", "proc", 0, "");
setgid(u);
setgroups(0, NULL);
setuid(u);
ret = execl("/bin/bash", "/bin/bash", NULL);
return ret;
}

程序掛載了 /proc 文件系統,設置用戶 ID 和組 ID,值都為“u”,然后運行 /bin/bash 程序,LXC 是一個操作系統級的虛擬化工具,使用 cgroups 和命名空間來完成資源的分離。現在我們把所有代碼放在一起,變量“u”的值設為65534,在 Debian 系統中,這是“nobody”和“nogroup”:

   

復制代碼
代碼如下:
#define _GNU_SOURCE
#include unistd.h>
#include stdio.h>
#include stdlib.h>
#include sys/types.h>
#include sys/wait.h>
#include sys/mount.h>
#include grp.h>
#include alloca.h>
#include errno.h>
#include sched.h>
static int callee();
const int u = 65534;
int main(int argc, char *argv[])
{
int r;
pid_t mypid;
void *mem = alloca(sysconf(_SC_PAGESIZE)) + sysconf(_SC_PAGESIZE);
mypid = clone(callee, mem, SIGCHLD | CLONE_NEWIPC | CLONE_NEWPID | CLONE_NEWNS | CLONE_FILES, NULL);
while (waitpid(mypid, r, 0) 0 errno == EINTR)
{
continue;
}
if (WIFEXITED(r))
{
return WEXITSTATUS(r);
}
return EXIT_FAILURE;
}
static int callee()
{
int ret;
mount("proc", "/proc", "proc", 0, "");
setgid(u);
setgroups(0, NULL);
setuid(u);
ret = execl("/bin/bash", "/bin/bash", NULL);
return ret;
}

執行以下命令來運行上面的代碼:

   

復制代碼
代碼如下:
root@w:~/pen/tmp# gcc -O -o ns.c -Wall -Werror -ansi -c89 ns.c
root@w:~/pen/tmp# ./ns
nobody@w:~/pen/tmp$ id
uid=65534(nobody) gid=65534(nogroup)
nobody@w:~/pen/tmp$ ps auxw
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
nobody 1 0.0 0.0 4620 1816 pts/1 S 21:21 0:00 /bin/bash
nobody 5 0.0 0.0 2784 1064 pts/1 R+ 21:21 0:00 ps auxw
nobody@w:~/pen/tmp$

注意上面的結果,UID 和 GID 被設置成 nobody 和 nogroup 了,特別是 ps 工具只輸出兩個進程,它們的 ID 分別是1和5(LCTT注:這就是上文介紹 CLONE_NEWPID 時提到的功能,在線程所在的命名空間內,進程 ID 可以為1,映射到命名空間外是另外一個 PID;而命名空間外的 ID 為1的進程一直是 init)。
網絡命名空間

接下來輪到使用 ip netns 來設置網絡的命名空間。第一步先確定當前系統沒有命名空間:

   

復制代碼
代碼如下:
root@w:~# ip netns list
Object "netns" is unknown, try "ip help".

如果報了上述錯誤,你需要更新你的系統內核,以及 ip 工具程序。這里假設你的內核版高于2.6.24,ip 工具版本也差不多,高于2.6.24(LCTT注:ip 工具由 iproute 安裝包提供,此安裝包版本與內核版本相近)。更新好后,ip netns list 在沒有命名空間存在的情況下不會輸出任務信息。加個名為“ns1”的命名空間看看:

   

復制代碼
代碼如下:
root@w:~# ip netns add ns1
root@w:~# ip netns list
ns1

列出網卡:

   

復制代碼
代碼如下:
root@w:~# ip link list
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff

創建新的虛擬網卡,并加到命名空間。虛擬網卡需要成對創建,互相關聯——就像交叉電纜一樣:

   

復制代碼
代碼如下:
root@w:~# ip link add veth0 type veth peer name veth1
root@w:~# ip link list
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff
3: veth1: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether d2:e9:52:18:19:ab brd ff:ff:ff:ff:ff:ff
4: veth0: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether f2:f7:5e:e2:22:ac brd ff:ff:ff:ff:ff:ff

這個時候 ifconfig -a 命令也能顯示新添加的 veth0 和 veth1 兩塊網卡。

很好,現在將這兩份塊網卡加到命名空間中去。注意一下,下面的 ip netns exec 命令用于將后面的命令在命名空間中執行(LCTT注:下面的結果顯示了在 ns1 這個網絡命名空間中,只存在 lo 和 veth1 兩塊網卡):

   

復制代碼
代碼如下:
root@w:~# ip link set veth1 netns ns1
root@w:~# ip netns exec ns1 ip link list
1: lo: mtu 65536 qdisc noop state DOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: veth1: mtu 1500 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether d2:e9:52:18:19:ab brd ff:ff:ff:ff:ff:ff

這個時候 ifconfig -a 命令只能顯示 veth0,不能顯示 veth1,因為后者現在在 ns1 命名空間中。

如果想刪除 veth0/veth1,可以執行下面的命令:

   

復制代碼
代碼如下:
ip netns exec ns1 ip link del veth1

我們可以為 veth0 分配 IP 地址:

   

復制代碼
代碼如下:
ifconfig veth0 192.168.5.5/24

在命名空間內為 veth1 分配 IP 地址:

   

復制代碼
代碼如下:
ip netns exec ns1 ifconfig veth1 192.168.5.10/24 up

在命名空間內外執行 ip addr list 命令:

   

復制代碼
代碼如下:
root@w:~# ip addr list
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.3.122/24 brd 192.168.3.255 scope global eth0
inet6 fe80::20c:29ff:fe65:259e/64 scope link
valid_lft forever preferred_lft forever
6: veth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 86:b2:c7:bd:c9:11 brd ff:ff:ff:ff:ff:ff
inet 192.168.5.5/24 brd 192.168.5.255 scope global veth0
inet6 fe80::84b2:c7ff:febd:c911/64 scope link
valid_lft forever preferred_lft forever
root@w:~# ip netns exec ns1 ip addr list
1: lo: mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 12:bd:b6:76:a6:eb brd ff:ff:ff:ff:ff:ff
inet 192.168.5.10/24 brd 192.168.5.255 scope global veth1
inet6 fe80::10bd:b6ff:fe76:a6eb/64 scope link
valid_lft forever preferred_lft forever

在命名空間內外查看路由表:

   

復制代碼
代碼如下:
root@w:~# ip route list
default via 192.168.3.1 dev eth0 proto static
192.168.3.0/24 dev eth0 proto kernel scope link src 192.168.3.122
192.168.5.0/24 dev veth0 proto kernel scope link src 192.168.5.5
root@w:~# ip netns exec ns1 ip route list
192.168.5.0/24 dev veth1 proto kernel scope link src 192.168.5.10

最后,將虛擬網卡連到物理網卡上,我們需要用到橋接。這里做的是將 veth0 橋接到 eth0,而 ns1 命名空間內則使用 DHCP 自動獲取 IP 地址:

   

復制代碼
代碼如下:
root@w:~# brctl addbr br0
root@w:~# brctl addif br0 eth0
root@w:~# brctl addif br0 veth0
root@w:~# ifconfig eth0 0.0.0.0
root@w:~# ifconfig veth0 0.0.0.0
root@w:~# dhclient br0
root@w:~# ip addr list br0
7: br0: mtu 1500 qdisc noqueue state UP
link/ether 00:0c:29:65:25:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.3.122/24 brd 192.168.3.255 scope global br0
inet6 fe80::20c:29ff:fe65:259e/64 scope link
valid_lft forever preferred_lft forever

為網橋 br0 分配的 IP 地址為192.168.3.122/24。接下來為命名空間分配地址:

   

復制代碼
代碼如下:
root@w:~# ip netns exec ns1 dhclient veth1
root@w:~# ip netns exec ns1 ip addr list
1: lo: mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
5: veth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 12:bd:b6:76:a6:eb brd ff:ff:ff:ff:ff:ff
inet 192.168.3.248/24 brd 192.168.3.255 scope global veth1
inet6 fe80::10bd:b6ff:fe76:a6eb/64 scope link
valid_lft forever preferred_lft forever

現在, veth1 的 IP 被設置成 192.168.3.248/24 了。

標簽:楚雄 淄博 忻州 阜陽 來賓 遼陽 荊州 迪慶

巨人網絡通訊聲明:本文標題《詳解Linux中的命名空間》,本文關鍵詞  詳解,Linux,中的,命名,空間,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解Linux中的命名空間》相關的同類信息!
  • 本頁收集關于詳解Linux中的命名空間的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产在线不卡视频| 欧美丰满一区二区免费视频| 香蕉久久夜色精品国产使用方法 | 欧美电视剧在线观看完整版| 色视频欧美一区二区三区| 激情深爱一区二区| 久久99国产精品久久99果冻传媒| 亚洲午夜久久久久久久久久久 | 日本韩国欧美国产| 91美女精品福利| 91视频com| 欧美日韩一区国产| 欧美性色综合网| 正在播放亚洲一区| 久久久久免费观看| 日韩理论电影院| 亚洲国产精品一区二区久久恐怖片| 亚洲在线观看免费视频| 尤物在线观看一区| 日韩av成人高清| 高潮精品一区videoshd| 欧美视频一区二| 久久精品欧美一区二区三区不卡| 精品国产亚洲在线| 亚洲欧美日韩中文播放| 天堂一区二区在线| 国产精品123| 欧美日韩视频在线观看一区二区三区 | 国产成人免费视频一区| 欧美日韩一区二区三区在线| 日韩精品最新网址| 亚洲最大成人网4388xx| 国产麻豆精品久久一二三| 在线观看三级视频欧美| 一级精品视频在线观看宜春院| 国产成人综合网| 国产亚洲一二三区| 国产成人8x视频一区二区| 欧美一区二区三区播放老司机| 亚洲国产精品欧美一二99| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲午夜av在线| 4438x亚洲最大成人网| 午夜精品爽啪视频| 欧美日韩国产在线观看| 三级在线观看一区二区 | 亚洲一区二区免费视频| 欧美日韩黄视频| 午夜国产精品一区| 久久久综合九色合综国产精品| 国产美女精品人人做人人爽| 中文字幕一区二区三区四区不卡 | 国产亚洲制服色| 99久久99久久精品免费看蜜桃| 亚洲欧洲精品一区二区精品久久久| 9i在线看片成人免费| 亚洲高清视频中文字幕| 日韩精品一区二区三区在线| 成人深夜福利app| 亚洲一区二区在线免费看| 欧美一区二区视频网站| 国产91精品一区二区麻豆网站| 亚洲免费看黄网站| 欧美变态凌虐bdsm| 欧美亚洲愉拍一区二区| 欧美96一区二区免费视频| 日韩美女视频一区二区| 欧美精品一区二区不卡| 在线电影院国产精品| 色综合久久久久| 99在线热播精品免费| 麻豆91小视频| 日韩精品电影在线| 午夜精品123| 一区二区三区产品免费精品久久75| 久久久91精品国产一区二区精品 | 日韩美女视频一区| 国产精品网站在线观看| 精品美女被调教视频大全网站| 欧美日韩中文字幕一区二区| 97成人超碰视| 成人免费的视频| 成人黄色国产精品网站大全在线免费观看| 午夜欧美在线一二页| 午夜精品福利一区二区三区蜜桃| 亚洲五码中文字幕| 性欧美大战久久久久久久久| 亚洲成人tv网| 奇米亚洲午夜久久精品| 韩国女主播成人在线| 国产米奇在线777精品观看| 岛国av在线一区| 欧美性videosxxxxx| 欧美日本国产一区| 久久综合av免费| 亚洲欧洲三级电影| 午夜婷婷国产麻豆精品| 裸体歌舞表演一区二区| 国产福利一区二区三区视频在线 | 国产精品久久久久久久久免费樱桃 | 国产精品水嫩水嫩| 一二三区精品福利视频| 久久97超碰国产精品超碰| 成人av电影在线网| 91精品国产黑色紧身裤美女| 久久久久久免费| 视频一区二区三区中文字幕| 成人一级片网址| 欧美一区二区美女| 亚洲夂夂婷婷色拍ww47| 国产精品99久久久久| 在线视频欧美精品| 欧美激情艳妇裸体舞| 捆绑调教美女网站视频一区| 91同城在线观看| 亚洲一区二区黄色| 色噜噜狠狠成人中文综合| 日韩欧美二区三区| 日本大胆欧美人术艺术动态| 99久久精品免费看国产| 亚洲一区二区三区中文字幕| 色综合婷婷久久| 亚洲免费资源在线播放| 色综合久久综合| 中文字幕日本乱码精品影院| 国产精品99久久久久久久女警| 欧美mv日韩mv| 国产精品性做久久久久久| 日韩视频国产视频| 国产一区999| 成人免费视频在线观看| 色综合久久久久网| 夜色激情一区二区| 3atv一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美一区二区啪啪| 国产中文字幕精品| 亚洲国产精品黑人久久久| av中文字幕不卡| 亚洲最大成人网4388xx| 欧美色图一区二区三区| 日韩成人一区二区三区在线观看| 欧美一区二区三区男人的天堂| 久久激情五月婷婷| 最新日韩av在线| 91精品国产一区二区三区香蕉| 韩国三级电影一区二区| 亚洲欧洲综合另类在线| 日韩一区二区精品在线观看| 成人黄色小视频| 久久国产人妖系列| 有坂深雪av一区二区精品| 久久久久久久综合狠狠综合| 在线观看精品一区| 国产成人免费视频网站| 亚洲bt欧美bt精品| 亚洲精品久久久久久国产精华液| 4hu四虎永久在线影院成人| 国产成人无遮挡在线视频| 日韩av在线发布| 亚洲免费看黄网站| 亚洲丝袜精品丝袜在线| 久久精品这里都是精品| 日韩欧美国产不卡| 欧美哺乳videos| 国产欧美精品国产国产专区| 日韩欧美区一区二| 精品国产一区久久| 欧美r级电影在线观看| 久久嫩草精品久久久精品一| 日韩一区二区三区高清免费看看| 色天使久久综合网天天| 色婷婷av一区二区| 555夜色666亚洲国产免| 91麻豆精品国产91| 91精品国产麻豆国产自产在线| 在线不卡一区二区| 久久久综合网站| 国产欧美一区二区精品性色超碰| 欧美激情一区二区| 亚洲人成伊人成综合网小说| 亚洲成av人综合在线观看| 三级影片在线观看欧美日韩一区二区 | 日本一区二区三区在线不卡| 久久亚洲春色中文字幕久久久| 欧美激情在线免费观看| 一区二区三区在线免费观看| 香蕉久久一区二区不卡无毒影院| 青青国产91久久久久久| 国内精品不卡在线| 色综合久久久久综合| 欧美一级免费观看| 国产夜色精品一区二区av| 中文字幕人成不卡一区| 秋霞电影网一区二区| 色悠久久久久综合欧美99| 欧美一二三区在线| 一区二区在线观看免费视频播放| 日本亚洲欧美天堂免费| 91国在线观看|