了解如何使用 Podman 在单独的用户空间运行容器。
Podman 是 libpod 库的一部分,使用户能够管理 pod、容器和容器镜像。在我的上一篇文章中,我写过将 Podman 作为一种更安全的运行容器的方式。在这里,我将解释如何使用 Podman 在单独的用户命名空间中运行容器。
作为分离容器的一个很棒的功能,我一直在思考 用户命名空间 ,它主要是由 Red Hat 的 Eric Biederman 开发的。用户命名空间允许你指定用于运行容器的用户标识符(UID)和组标识符(GID)映射。这意味着你可以在容器内以 UID 0 运行,在容器外以 UID 100000 运行。如果容器进程逃逸出了容器,内核会将它们视为以 UID 100000 运行。不仅如此,任何未映射到用户命名空间的 UID 所拥有的文件对象都将被视为 nobody
所拥有(UID 是 65534
, 由 kernel.overflowuid
指定),并且不允许容器进程访问,除非该对象可由“其他人”访问(即世界可读/可写)。
如果你拥有一个权限为 660 的属主为“真实” root
的文件,而当用户命名空间中的容器进程尝试读取它时,会阻止它们访问它,并且会将该文件视为 nobody
所拥有。
示例
以下是它是如何工作的。首先,我在 root
拥有的系统中创建一个文件。
$ sudo bash -c "echo Test > /tmp/test"
$ sudo chmod 600 /tmp/test
$ sudo ls -l /tmp/test
-rw-. 1 root root 5 Dec 17 16:40 /tmp/test
接下来,我将该文件卷挂载到一个使用用户命名空间映射 0:100000:5000
运行的容器中。
“`
$ sudo podman run -ti -v /tmp/test:/tmp/test:Z –uidmap 0:100000:5000 fedora sh
id
uid=0(root) gid=0(root) groups=0(root)
ls -l /tmp/test
-rw-rw
via: https://opensource.com/article/18/12/podman-and-user-namespaces
作者:Daniel J Walsh 选题:lujun9972 译者:wxy 校对:wxy
主题测试文章,只做测试使用。发布者:eason,转转请注明出处:https://aicodev.cn/2019/08/26/podman-%e5%92%8c%e7%94%a8%e6%88%b7%e5%91%bd%e5%90%8d%e7%a9%ba%e9%97%b4%ef%bc%9a%e5%a4%a9%e4%bd%9c%e4%b9%8b%e5%90%88/