使用用户时(在我的例子中是通过 LXC),您将一系列从属 GID 和 UID 分配给非特权用户。请参阅资源:subuid(5),subgid(5),newuidmap(1),newgidmap(1),user_namespaces(7)。
然后可以使用该范围,并将通过用户映射到系统帐户。
假设我们有一个(主机)系统帐户john,其 UID(和 GID)为 1000。GID 和 UID 的分配范围是 100000..165536。
所以一个条目分别存在于/etc/subgid和 中/etc/subuid:
john:100000:65536
Run Code Online (Sandbox Code Playgroud)
非特权容器内的文件归“内部”john所有,现在归主机 101000 所有,归“内部”root所有的文件归 100000。
通常,这些范围不会分配给主机上的任何名称。
ls朋友们提供更有意义的输出?john在我们的情况下?如果是这样,在从属范围内的那些有效用户和用户“所有者”之间创建共享组并相应地设置权限的唯一明智方法是?好吧,或者 ACL,很明显。我正在学习 Linux 用户命名空间,并且我观察到一种对我来说并不完全清楚的奇怪行为。
我在初始用户命名空间中创建了一系列 UID,我可以通过newuidmap命令将子用户命名空间中的 UID 映射到这些 UID 。这些是我的设置:
$ grep '^woky:' /etc/subuid
woky:200000:10000
$ id -u
1000
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个新的用户命名空间并将其 UID 范围映射[0-10000)到[200000-210000)父用户命名空间中:
第一个终端:
$ PS1='% ' unshare -U bash
% echo $$
1337
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)第二个终端:
$ ps -p 1337 -o uid
UID
1000
$ newuidmap 1337 0 200000 10000
$ ps -p 1337 -o uid
UID
1000
Run Code Online (Sandbox Code Playgroud)第一个终端:
% id
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
Run Code Online (Sandbox Code Playgroud)因此,即使newuidmap成功完成,新用户命名空间内部和外部的 UID 也没有更改。
然后我找到了下面这篇文章 http://www.itinken.com/blog/2016/Sep/exploring-unprivileged-containers/让我大开眼界。我已经尝试过前面的场景,但使用以下 …