【发布时间】:2021-11-27 03:05:13
【问题描述】:
我正在尝试从无 root 的 golang 程序中启动一个新进程,赋予该进程 root 权限,并使用 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
我假设这意味着我需要临时 chown 一些文件才能获得 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())
【问题讨论】:
-
您尝试运行的命令是否可以在 Go 之外运行?
标签: go exec system-calls root sudo