Ответ 1
Вы можете добавить syscall.Credential struct в Cmd.SysProcAttr
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid}
Используя пакет 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)
}
}
Вы можете добавить syscall.Credential struct в Cmd.SysProcAttr
cmd := exec.Command(command, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{}
cmd.SysProcAttr.Credential = &syscall.Credential{Uid: uid, Gid: gid}