Golang实现UTS隔离

隔离机制是实现Docker容器的重要技术,其中UTS Namespace隔离的是主机与域名,
Linux内核中的调用参数为CLONE_NEWUTS。我们都知道Docker是用Golang实现了
那么自然我们可以用Golang来实现UTS Namespace隔离
主机环境如下

➜  ~ uname -a
Linux ubuntu 4.4.0-131-generic #157-Ubuntu SMP Thu Jul 12 15:51:36 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

➜  ~ go version
go version go1.6.2 linux/amd64

Golang源码

package main

import (
    "os/exec"
    "syscall"
    "os"
    "log"
)

func main(){
    cmd := exec.Command("sh")
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags:syscall.CLONE_NEWUTS,
    }
    cmd.Stdin = os.Stdin
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    if err := cmd.Run();err !=nil{
        log.Fatal(err)
    }
}

编译运行产生进入到fork出来新的进程里面的shell交互环境
查看当前进程的PID及系统中进程之间的关系

# echo $$
1805

# pstree -pl
systemd(1)-+-accounts-daemon(868)-+-{gdbus}(889)
           |                      `-{gmain}(881)
           |-acpid(865)
           |-atd(836)
           |-cron(842)
           |-dbus-daemon(848)
           |-dhclient(962)
           |-iscsid(1061)
           |-iscsid(1062)
           |-login(1138)---zsh(1228)
           |-lvmetad(422)
           |-lxcfs(845)-+-{lxcfs}(856)
           |            `-{lxcfs}(857)
           |-mdadm(897)
           |-nginx(1082)---nginx(1084)
           |-polkitd(907)-+-{gdbus}(912)
           |              `-{gmain}(910)
           |-rsyslogd(831)-+-{in:imklog}(861)
           |               |-{in:imuxsock}(860)
           |               `-{rs:main Q:Reg}(862)
           |-snapd(873)-+-{snapd}(913)
           |            |-{snapd}(914)
           |            |-{snapd}(915)
           |            |-{snapd}(921)
           |            |-{snapd}(930)
           |            `-{snapd}(931)
           |-sshd(1077)---sshd(1260)---sshd(1291)---zsh(1292)---sudo(1790)---go(1791)-+-ns(1802)-+-sh(1805)---pstree(1806)
           |                                                                          |          |-{ns}(1803)
           |                                                                          |          `-{ns}(1804)
           |                                                                          |-{go}(1792)
           |                                                                          |-{go}(1793)
           |                                                                          |-{go}(1794)
           |                                                                          `-{go}(1798)
           |-systemd(1219)---(sd-pam)(1225)
           |-systemd-journal(361)
           |-systemd-logind(826)
           |-systemd-timesyn(679)---{sd-resolve) S 1 (689)
           `-systemd-udevd(436)

fork进程的shell环境查看
(/proc/$PID/ns/下每个文件对应一个namespace, 它是一个符号链接, 会指向一个仅kernel可见的被称为nsfs(namespace filesystem)的文件系统中的一个inode)

# readlink /proc/1805/ns/uts
uts:[4026532192]
# readlink /proc/1802/ns/uts
uts:[4026531838]

在主机上查看

➜  ~ sudo readlink /proc/1802/ns/uts
uts:[4026531838]
➜  ~ sudo readlink /proc/1805/ns/uts
uts:[4026532192]

在fork进程shell环境中查看并修改hostname

# hostname
ubuntu
# hostname -b bird
# hostname
bird

在主机上

➜  ~ hostname
ubuntu

可以看到,fork进程的hostname产生了变更,主机不受影响,同样,主机hostname也不会对fork进程产生影响,由此fork进程的hostname
与主机父进程的hostname成功实现了隔离。

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • 写这个系列文章主要是对之前做项目用到的docker相关技术做一些总结,包括docker基础技术Linux命名空间,...
    __七把刀__阅读 5,794评论 0 16
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,489评论 0 120
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,383评论 0 27
  • Docker容器技术已经发展了好些年,在很多项目都有应用,线上运行也很稳定。整理了部分Docker的学习笔记以及新...
    __七把刀__阅读 11,444评论 0 58
  • 一个人真正的资本,不是美貌,也不是金钱,而是人品。 人品是生活的通行证,在冷峻又善变的时代,人品是彼此心灵最后的依...
    优祺和平阅读 184评论 0 1