首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux用户NameSpaces

Linux用户NameSpaces
EN

Stack Overflow用户
提问于 2020-10-18 08:12:50
回答 1查看 451关注 0票数 4

我正在Linux上使用Go来试验用户名称空间。我无法理解的是,虽然在创建命名空间时正在设置uid和gid映射,但当我使用sudo启动二进制时,它仍然标识为无人用户,但是当我使用普通用户启动它时,一切正常。如需参考,请参阅下面的代码

代码语言:javascript
复制
...
cmd := exec.Command("/bin/sh")
    cmd.Stdout = os.Stdout
    cmd.Stdin = os.Stdin
    cmd.Stderr = os.Stderr
    cmd.SysProcAttr = &syscall.SysProcAttr{
        Cloneflags: syscall.CLONE_NEWUSER,
        UidMappings: []syscall.SysProcIDMap{
            {
                ContainerID: 0,
                HostID:      1000,
                Size:        1,
            },
        },
        GidMappings: []syscall.SysProcIDMap{
            {
                ContainerID: 0,
                HostID:      1000,
                Size:        1,
            },
        },
    }
    cmd.Run()

....
...

在主机上,我可以确认用户和组映射确实成功。当前的pid为87751。

代码语言:javascript
复制
sudo cat /proc/87751/uid_map
         0       1000          1
sudo cat /proc/87751/gid_map
         0       1000          1

但是当我在构建

代码语言:javascript
复制
go build -o user_n
sudo ./user_n
sh-5.0$ whoami 
nobody
sh-5.0$ id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

但是,当我使用普通用户运行二进制时,它的工作方式与预期的一样。

代码语言:javascript
复制
./user_n
sh-5.0# whoami
root
sh-5.0# id
uid=0(root) gid=0(root) groups=0(root),65534(nobody) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

虽然使用普通用户运行二进制文件是一个选项,但我想知道为什么使用sudo运行并不会给出预期的结果。任何指示都将受到极大的赞赏。

更多信息

代码语言:javascript
复制
Fedora 31
Kernel 5.3.11-100.fc29.x86_64
go version go1.14.3 linux/amd64
EN

回答 1

Stack Overflow用户

发布于 2020-10-19 08:59:51

在第一种情况下,您作为根用户(通过sudo)运行,而子用户名称空间中没有指定映射。因此,由此产生的“无人”身份。

在第二种情况下,您以用户id 1000的身份运行程序,其映射是: 1000成为子用户命名空间中的根。因此,产生的“根”id。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64411135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档