无根二叉树

在上一篇有关用户名称空间和Podman的 文章中 ,我讨论了如何使用Podman命令来启动具有不同用户名称空间的不同容器,从而使容器之间的分隔更好。 Podman还利用用户名称空间来以无根模式运行。 基本上,当非特权用户运行Podman时,该工具将设置并加入用户名称空间。 在Podman成为用户名称空间内部的根之后,允许Podman挂载某些文件系统并设置容器。 请注意,除了用户可用的其他UID之外,此处没有特权升级,如下所述。

Podman如何创建用户名称空间?

影子工具

当前大多数Linux发行版都包含一个影子实用程序版本,该版本使用/ etc / subuid/ etc / subgid文件来确定用户名称空间中用户可以使用哪些UID和GID。

$ cat /etc/subuid
dwalsh:100000:65536
test:165536:65536
$ cat /etc/subgid
dwalsh:100000:65536
test:165536:65536

useradd程序自动为添加到系统中的每个用户分配65536个UID。 如果系统上已有用户,则需要自己分配UID。 这些文件的格式为用户名: STARTUID :TOTALUIDS 。 在我的情况下,这意味着为dwalsh分配了100000至165535的UID以及我的默认UID,该默认ID恰好是在/ etc / passwd中定义的3265。 分配这些UID范围时,请注意它们与系统上的任何实际 UID都不重叠。 如果您有一个列为UID 100001的用户,那么我(dwalsh)将能够成为此UID并可能读取/写入/执行该UID拥有的文件。

Shadow-utils还添加了两个setuid程序(或setfilecap)。 在Fedora上,我有:

$ getcap /usr/bin/newuidmap
/usr/bin/newuidmap = cap_setuid+ep
$ getcap /usr/bin/newgidmap
/usr/bin/newgidmap = cap_setgid+ep

Podman执行这些文件以设置用户名称空间。 您可以通过从无根容器内部检查/ proc / self / uid_map和/ proc / self / gid_map来查看映射。

$ podman run alpine cat /proc/self/uid_map /proc/self/gid_map
0       3267            1
1       100000          65536
0       3267            1
1       100000          65536

如上所示,Podman默认将容器的根映射到您当前的UID(3267),然后将分配的UID / GID范围映射到/ etc / subuid和/ etc / subgid中,从1开始。这意味着在我的示例中,UID = 1容器中的值是UID 100000,UID = 2是UID 100001,一直到65536,即165535。

UID或GID所拥有的,未映射到用户名称空间的,来自用户名称空间之外的任何项目似乎都属于在kernel.overflowuid sysctl中配置的用户,默认情况下为35534,即我的/ etc / passwd文件说名字没有人 。 由于您的进程无法以未映射的ID身份运行,因此所有者和组权限不适用,因此您只能基于它们的“其他”权限来访问这些文件。 这包括运行容器的系统上的真实根目录所有的文件,因为根目录未映射到用户名称空间。

Buildah命令具有一个很酷的功能, buildah unshare 。 这使您处于Podman运行所在的用户命名空间中,但无需输入容器的文件系统,因此您可以列出主目录的内容。

$ ls -ild /home/dwalsh
8193 drwx--x--x. 290 dwalsh dwalsh 20480 Jan 29 07:58 /home/dwalsh
$ buildah unshare ls -ld /home/dwalsh
drwx--x--x. 290 root root 20480 Jan 29 07:58 /home/dwalsh

注意,当在用户名称空间之外列出home dir属性时,内核将所有权报告为dwalsh,而在用户名称空间内部,内核将目录报告为root拥有。 这是因为主目录归3267所有,并且在用户名称空间内,我们将该UID视为根目录。

设置用户名称空间后,在Podman中接下来会发生什么?

Podman使用容器/存储来拉出容器映像,并且容器/存储足够聪明,可以将映像中由根拥有的所有文件映射到用户名称空间的根,以及将不同UID拥有的任何其他文件映射到其用户名称空间UID。 默认情况下,此内容被写入〜/ .local / share / containers / storage。 容器存储可以在无根模式下与vfs模式或Overlay一起工作。 注意:仅当安装了fuse-overlayfs可执行文件时,才支持覆盖。

如果使用保险丝覆盖,则Podman会安装容器的存储; 如果存储驱动程序正在使用vfs,则无需安装。 不过,vfs上的Podman需要大量空间,因为每个容器都会复制整个基础文件系统。

然后Podman挂载/ proc和/ sys以及一些tmpfs,并在容器中创建设备。

为了使用除主机网络之外的网络,Podman使用slirp4netns程序为非 特权网络名称空间设置用户模式网络 。 Slirp4netns允许Podman将容器内的端口暴露给主机。 请注意,内核仍将不允许非特权进程绑定到小于1024的端口。绑定端口需要Podman-1.1或更高版本。

无根Podman可以使用用户名称空间进行容器分离,但是您只能访问/ etc / subuid文件中定义的UID。

结论

Podman工具使人们能够在不牺牲系统安全性的情况下构建和使用容器。 您可以授予开发人员所需的访问权限,而无需授予他们root权限。

而且,当您将容器投入生产时,您可以利用用户名称空间提供的额外安全性,以使工作负载彼此隔离。

翻译自: https://opensource.com/article/19/2/how-does-rootless-podman-work

无根二叉树

无根二叉树_无根Podman如何工作?相关推荐

  1. 自建ca根证书_独立根CA的安装与证书申请

    独立根 CA 的安装与证书申请  独立根 CA 与企业 CA 不同,独立 CA 不需要使用 Active Directory 目录服务.独 立 CA 最初是为了用作 CA 层次结构中的受信任的脱机根 ...

  2. 自动取款机如何使用无卡取款_无卡取款怎么操作

    展开全部 以中国银行无卡取款为例: 1.首先,登录中国银行手机APP.登录进入主界面后,点击更多. 2.页面跳转,拉到最下方e69da5e887aa32313133353236313431303231 ...

  3. java 反射无参方法_无参构造方法 ? 反射

    若一个类中未定义默认的构造方法,当通过反射的机制这个类的实例会报下面的错误: Exception in thread "main" java.lang.[b]Instantiati ...

  4. java 创建根证书_创建根证书及其子证书

    "CN=***" ,不然证书就和域名不一致了,至于其他就是文件名,无所谓了! 1. 使用MakeCert.exe创建一个自签名的根证书 makecert -n "CN=w ...

  5. 姓名学中萍字无根 怎么解释_无根Buildah的工作原理:在非特权环境中构建容器

    姓名学中萍字无根 怎么解释 在以前的文章中,包括无根Podman如何工作? ,我谈到了Podman ,该工具使用户可以管理Pod,容器和容器图像. Buildah是用于构建与Podman互补的Open ...

  6. 容器大小_无根容器内部结构浅析

    随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器.本文介绍了无根容器的内部结构,并分析了无根容器网络组件中的漏洞. 随着云计算的发展,容器变得越来越流行,同时也 ...

  7. 无盘服务器4根网线雨两根网线的区别,网线接法的描述:实际用到4根。

    正线(标准568B):两端线序一样,线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕. 反线(568A):一端为正线的线序,另一端为:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕. 我的店铺:不买也麻烦点一下 ...

  8. 树莓派的初步使用--ip地址查询(无屏幕、无路由器、只有一根网线和能连wifi的笔记本)

    1.安装软件 空sd卡利用balenaEtcher制作树莓派系统 2.树莓派ip地址(无屏幕.无路由器.只有一根网线和能连wifi的笔记本) 使用网线连接笔记本和树莓派主板(通电),将笔记本的无线网改 ...

  9. android 同根动画_[转载]Android anim动画切换效果

    关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...

最新文章

  1. sqlmap 连接mysql_sqlmap连接Mysql实现getshell | CN-SEC 中文网
  2. Java项目:兼职平台系统(java+Springboot+ssm+HTML+maven+Ajax+mysql)
  3. Spring3, Hibernate3.6与Proxool连接池配置
  4. 《SpringMVC数据绑定入门》笔记
  5. Acwing 第 1 场热身赛 【完结】
  6. 【重复制造精讲】Backflush 倒冲介绍
  7. Java实现斐波那契数列的两种方法
  8. 8个前端技术学习网站
  9. python找重复元素_Python笔记(二)查找重复元素
  10. PHP-laravel框架一1
  11. 知网哭穷赔不起1200亿,网友:收钱时咋不嫌多
  12. “IndentationError: unindent does not match any outer indentation level“ 错误解决
  13. 2017广州大学计算机组成原理,广州大学松田学院计算机组成原理复习题(仅供参考).doc...
  14. Linux使用技巧5--格式化U盘
  15. python中的for什么意思_python中的for是什么
  16. ubuntu下安装skyeye方法
  17. 中国呼吸介入领导者堃博医疗在港交所挂牌上市;勃林格殷格翰收购Abexxa Biologics | 医药健闻...
  18. 名编辑电子杂志大师教程 | 如何直接输出安卓apk格式?
  19. 李开复针对马加爵事件写给中国学生的一封信
  20. 推荐 :如何通过数据分析选品(以新零售为例)

热门文章

  1. idea高效找出全部未被使用的代码
  2. Python学习(14)--内置函数
  3. 深入理解:overflow:hidden——溢出,坍塌,清除浮动
  4. dbUtils 原理
  5. Ruby对象、变量和常量
  6. kohana的modules集合
  7. Notepad++ 使用心得
  8. 对Leader的闲话
  9. 算法高级(41)-推荐算法实现
  10. java8 64x下载_jdk8 u102 64位下载