sudo 在 userns 的坑
作者: xtlsoft
时间: 2018-08-10 18:39:49
分类: 旧稿
由来
包:github.com/xtlsoft/container
由于 Golang 将 Setsuid 等 Syscall 给去除了,所以目前我想到用 sudo 模拟。
(没有库?Shell 来凑~)
问题
一代码:
package main
import (
"os"
"github.com/xtlsoft/container"
)
func main() {
cmd := container.NewNS().
ApplyUTS().
ApplyPID().
ApplyIPC().
ApplyNet().
ApplyMount().
ApplyUser().
Command("sudo", "-u", "nobody", "ls")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Start()
cmd.Wait()
}
乍一看没啥,但是执行得到:
sudo: PERM_SUDOERS: setresuid(-1, 1, -1): 无效的参数
sudo: 没有找到有效的 sudoers 资源,退出
sudo: 无法初始化策略插件
WTF???
查找资料
恩,非常棒,Google 和 Bing 搜索都是 0 收录,StackOverflow 搜索也没人问这种问题。
那么只有自己解决。
解决方案
恩,sudo 不能在 userns 内直接用。
最后我的解决方案是: 去掉
ApplyUser().
这一行。