无根二叉树_无根Podman如何工作?
无根二叉树
在上一篇有关用户名称空间和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如何工作?相关推荐
- 自建ca根证书_独立根CA的安装与证书申请
独立根 CA 的安装与证书申请 独立根 CA 与企业 CA 不同,独立 CA 不需要使用 Active Directory 目录服务.独 立 CA 最初是为了用作 CA 层次结构中的受信任的脱机根 ...
- 自动取款机如何使用无卡取款_无卡取款怎么操作
展开全部 以中国银行无卡取款为例: 1.首先,登录中国银行手机APP.登录进入主界面后,点击更多. 2.页面跳转,拉到最下方e69da5e887aa32313133353236313431303231 ...
- java 反射无参方法_无参构造方法 ? 反射
若一个类中未定义默认的构造方法,当通过反射的机制这个类的实例会报下面的错误: Exception in thread "main" java.lang.[b]Instantiati ...
- java 创建根证书_创建根证书及其子证书
"CN=***" ,不然证书就和域名不一致了,至于其他就是文件名,无所谓了! 1. 使用MakeCert.exe创建一个自签名的根证书 makecert -n "CN=w ...
- 姓名学中萍字无根 怎么解释_无根Buildah的工作原理:在非特权环境中构建容器
姓名学中萍字无根 怎么解释 在以前的文章中,包括无根Podman如何工作? ,我谈到了Podman ,该工具使用户可以管理Pod,容器和容器图像. Buildah是用于构建与Podman互补的Open ...
- 容器大小_无根容器内部结构浅析
随着云计算的发展,容器变得越来越流行,同时也产生了实现容器的新方案,其中之一就是无根容器.本文介绍了无根容器的内部结构,并分析了无根容器网络组件中的漏洞. 随着云计算的发展,容器变得越来越流行,同时也 ...
- 无盘服务器4根网线雨两根网线的区别,网线接法的描述:实际用到4根。
正线(标准568B):两端线序一样,线序是:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕. 反线(568A):一端为正线的线序,另一端为:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕. 我的店铺:不买也麻烦点一下 ...
- 树莓派的初步使用--ip地址查询(无屏幕、无路由器、只有一根网线和能连wifi的笔记本)
1.安装软件 空sd卡利用balenaEtcher制作树莓派系统 2.树莓派ip地址(无屏幕.无路由器.只有一根网线和能连wifi的笔记本) 使用网线连接笔记本和树莓派主板(通电),将笔记本的无线网改 ...
- android 同根动画_[转载]Android anim动画切换效果
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...
最新文章
- sqlmap 连接mysql_sqlmap连接Mysql实现getshell | CN-SEC 中文网
- Java项目:兼职平台系统(java+Springboot+ssm+HTML+maven+Ajax+mysql)
- Spring3, Hibernate3.6与Proxool连接池配置
- 《SpringMVC数据绑定入门》笔记
- Acwing 第 1 场热身赛 【完结】
- 【重复制造精讲】Backflush 倒冲介绍
- Java实现斐波那契数列的两种方法
- 8个前端技术学习网站
- python找重复元素_Python笔记(二)查找重复元素
- PHP-laravel框架一1
- 知网哭穷赔不起1200亿,网友:收钱时咋不嫌多
- “IndentationError: unindent does not match any outer indentation level“ 错误解决
- 2017广州大学计算机组成原理,广州大学松田学院计算机组成原理复习题(仅供参考).doc...
- Linux使用技巧5--格式化U盘
- python中的for什么意思_python中的for是什么
- ubuntu下安装skyeye方法
- 中国呼吸介入领导者堃博医疗在港交所挂牌上市;勃林格殷格翰收购Abexxa Biologics | 医药健闻...
- 名编辑电子杂志大师教程 | 如何直接输出安卓apk格式?
- 李开复针对马加爵事件写给中国学生的一封信
- 推荐 :如何通过数据分析选品(以新零售为例)