You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 08:29:50