当前位置: 首页 > 面试题库 >

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

羊舌炯
2023-03-14
问题内容

使用该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)
   }
}

问题答案:

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

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


 类似资料:
  • 我使用wkhtmltopdf从html生成pdf,我试图通过PHP exec()函数运行下面的命令,但它不生成pdf,我没有显示任何错误,虽然。但是当我通过命令行运行相同的命令时,它就工作了。 下面是我用来执行pdf生成命令的PHP代码taht。 有关我的设置的一些信息: 操作系统-Ubuntu 12.04 PHP版本 任何帮助将不胜感激,谢谢。

  • 问题内容: 我在弄清楚如何使用os / exec包运行多个命令时遇到了麻烦。我已经摸索了网络和stackoverflow,还没有找到任何适合我的案例。这是我的资料来源: 我想要命令,就像从终端一样。 因此,我需要依次运行每个命令,并等待最后一个命令完成后再继续。在当前版本的代码中,当前假设是因为执行cd path并在新的shell中执行了./configure,而不是与上一个命令位于同一目录中。有

  • 我想通过exec maven插件运行2个主配置文件。在我的生产中,我只使用“prod”配置文件,在我的持续集成中,我希望使用“prepod”配置文件和“prod”配置文件。 在产品 mvn-pprod 在连续集成中: mvn-PpreProd, prod 当我运行maven命令时,我有这个日志(com.mycompany.RunMyProd.main()运行2次): [信息]——exec mave

  • 我正在使用java执行一个curl命令。 我想在我的代码中获取这个curl命令的输出,但是我的stdoutout是空的。 尝试手动执行curl命令,工作正常。然后我打印了标准误差,我可以看到: 当curl命令被手动执行时,它工作得很好,那么为什么不通过Runtime.getRuntime()呢? 请建议!!任何帮助将不胜感激。

  • 我需要用docker exec运行2个命令。我正在从docker容器中复制一个文件,不想处理凭据来使用像ssh这样的东西。此命令复制一个文件: 但它会创建一个子目录var/log,我想避免这种情况,所以如果我可以在docker容器中执行这些操作,我应该很好: 如何让docker exec运行2个命令?

  • 一些注意事项: 1。我最初使用的TestNG jar来自java项目中的maven repo。下面的所有方法都是用maven testNG jar和新的TestNG6.9.12下载进行测试的。 2。我可以从Eclipse中运行这个文件。只有当我尝试从命令行运行时才有问题。 3。最终目标是通过javafx应用程序按钮触发命令行来运行测试。如果提供的解决方案避免在cmd中键入绝对路径,因为应用程序将在