一尘不染

在另一个用户下通过os / exec运行外部命令

go

使用该os/exec软件包,我想代表另一个用户在* nix操作系统上运行外部命令(当然go进程在具有su特权的另一个用户的root用户下运行)

我想避免使用“ su”或“ bash”命令,而只使用go即可。

我使用了一种方法,syscall.Setuid但这会将用户更改为主项目,我只需要将用户更改为外部子进程即可:

func (self *Command) LoseTo(username string) {
   u, err := user.Lookup(username)
   if err != nil {
      fmt.Printf("%v", err)
   }

   uid, err := strconv.Atoi(u.Uid)
   if err := syscall.Setuid(uid); err != nil {
      fmt.Printf("%v", err)
   }
}

阅读 224

收藏
2020-07-02

共1个答案

一尘不染

您可以将syscall.Credential结构添加到Cmd.SysProcAttr

cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid}
2020-07-02