Os.StartProcess()不允许在Golang中使用sudo命令 [英] os.StartProcess() not allowing for sudo commands in golang

查看:23
本文介绍了Os.StartProcess()不允许在Golang中使用sudo命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从一个无根的Golang程序中启动一个新进程,为该进程授予根权限,并使用sudo执行一个命令。但是,我得到了以下输出:

sudo: /etc/sudo.conf is owned by uid 65534, should be 0
sudo: /etc/sudo.conf is owned by uid 65534, should be 0
sudo: error in /etc/sudo.conf, line 0 while loading plugin "sudoers_policy"
sudo: /usr/libexec/sudo/sudoers.so must be owned by uid 0
sudo: fatal error, unable to load plugins
exit status 1

我假设这意味着我需要临时保存一些文件才能拥有sudo访问权限。这个过程可能吗?以下是我当前的StartProcess代码

cred := &syscall.Credential{0, 0, []uint32{}, false}
sys := &syscall.SysProcAttr{Credential: cred, Noctty: false}
attr := os.ProcAttr{Env: os.Environ(), Files: []*os.File{os.Stdin, os.Stdout, os.Stderr}, Sys: sys}
proc, err := os.StartProcess("/bin/sudo", []string{"/bin/podman", "image", "load", "--input=" + scpOpts.Save.Output}, &attr)
if err != nil {
    return err
}

state, err := proc.Wait()
if err != nil {
    return err
}

fmt.Println(state.String())

推荐答案

首先检查/etc文件夹的所有权:将其设置回根目录(如此处所示)会有所帮助。

您有一个类似的podman issue,它说明了用户所有权的重要性。

OP cbd123确认the comments

我的问题是我没有正确映射gid或uid。

我让它正常工作,只是syscall.CLONE_NEWUSER由于max_user_namespace文件而触发无效参数错误这一事实存在一些问题。

这篇关于Os.StartProcess()不允许在Golang中使用sudo命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆