Linux UTS namespace 的简单实现

UTS 简介

UTS是Linux命名空间的一种,可以用作主机名的隔离

代码实现

  • command()函数返回*Cmd结构体,参数sh表示被 fork 出来的新进程内的初始命令为sh
type Cmd struct {Path stringArgs []stringEnv []stringDir stringStdin io.ReaderStdout io.WriterStderr io.WriterExtraFiles []*os.FileSysProcAttr *syscall.SysProcAttrProcess *os.ProcessProcessState *os.ProcessState
}
  • cmd的SysProcAttr字段保存可选的、操作系统特定的属性
  • syscall.CLONE_NEWUTS表示创建一个UTS namespace
  • Run 启动指定的命令并等待它完成
package mainimport "os"
import "os/exec"
import "syscall"
import "log"
func main(){cmd := exec.Command("sh")cmd.SysProcAttr = &syscall.SysProcAttr{Cloneflags:syscall.CLONE_NEWUTS,}cmd.Stdin=os.Stdincmd.Stdout=os.Stdoutcmd.Stderr=os.Stderrif err:=cmd.Run(); err!=nil{log.Fatal(err)}
}

运行

运行uts.go更改主机名为nmsl

$ sudo go run uts.go
# hostname -b nmsl            
# hostname                  
nmsl                           
#

另开一个shell,发现没有输出nmsl,因此uts是隔离的

$ hostname
Nietzsche


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部