猿问

为什么 Go 中的 CLONE_NEWUSER 克隆标志会导致参数无效错误

我想测试CLONE_NEWUSER国旗。我的内核版本大于 3.8(因为CLONE_NEWUSER不是功能 <3.8)。


当我运行代码时,它说无效参数错误:


2020/10/18 23:09:59 fork/exec /usr/bin/sh: invalid argument

exit status 1

这是源代码:


package main


import (

    "log"

    "os"

    "os/exec"

    "syscall"

)


func main() {


    cmd := exec.Command("sh")

    cmd.SysProcAttr = &syscall.SysProcAttr{

        Cloneflags: syscall.CLONE_NEWUTS | syscall.CLONE_NEWIPC | syscall.CLONE_NEWPID | syscall.CLONE_NEWUSER | syscall.CLONE_NEWNS | syscall.CLONE_NEWNET,

    }


    cmd.SysProcAttr.Credential = &syscall.Credential{

        Uid: uint32(0),

        Gid: uint32(0),

    }


    cmd.Stdin = os.Stdin

    cmd.Stdout = os.Stdout

    cmd.Stderr = os.Stderr


    if err := cmd.Run(); err != nil {

        log.Fatal(err)

    }

}


互换的青春
浏览 245回答 2
2回答

隔江千里

看起来像交叉编译错误。可执行文件是为不同的操作系统配置构建的。参考:http ://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5

Helenr

如果你的操作系统是 centos7,它默认禁用用户命名空间。使用以下命令启用它:#&nbsp;echo&nbsp;640&nbsp;>&nbsp;/proc/sys/user/max_user_namespaces也许对你有帮助。
随时随地看视频慕课网APP

相关分类

Go
我要回答