Запуск внешних команд через os/exec под другим пользователем

Используя пакет os/exec, я хочу запустить внешнюю команду в операционной системе * nix от имени другого пользователя (конечно, запустите процесс под root-пользователем другого пользователя с привилегиями su)

Я хочу избегать команд "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)
   }
}

Ответы

Ответ 1

Вы можете добавить syscall.Credential struct в Cmd.SysProcAttr

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