如何在Go中通过exec.Cmd.Start()设置进程的UID与GID?
能否为exec.Cmd.Start()启动的进程设置UID与GID?
我希望实现类似libuv_spawn中设置UV_PROCESS_SET{UID,GID}选项的行为。最初我以为可以使用SysProcAttr中的UidMapping和GidMapping,但该功能似乎与命名空间相关。有没有无需手动调用fork/exec/setuid的实现方式?
可行方案
可以通过SysProcAttr的Credential字段实现该需求,无需手动调用fork/exec/setuid:
cmd := exec.CommandContext(context.Background(), "whoami") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr cmd.SysProcAttr = &syscall.SysProcAttr{ Credential: &syscall.Credential{ Uid: uint32(myUID), Gid: uint32(myGID), }, } if err := cmd.Start(); err != nil { panic(err) } if err := cmd.Wait(); err != nil { panic(err) }
运行该代码会输出对应UID的用户名。
内容的提问来源于stack exchange,提问作者Paul Rubel
相关产品推荐
相关产品推荐

