登录
首页 >  Golang >  Go问答

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

来源:Golang技术栈

时间:2023-05-01 14:00:47 292浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《在另一个用户下通过 os/exec 运行外部命令》,主要介绍了golang,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

使用该os/exec软件包,我想代表另一个用户在 *nix OS 上运行一个外部命令(当然 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)
   }
}

正确答案

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

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

文中关于golang的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《在另一个用户下通过 os/exec 运行外部命令》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>