podman无根用户基本设置和使用

在允许没有root特权的用户运行Podman之前,管理员必须安装或构建Podman并完成以下配置

cgroup V2Linux内核功能允许用户限制普通用户容器可以使用的资源,如果使用cgroupV2启用了运行Podman的Linux发行版,则可能需要更改默认的OCI运行时。某些较旧的版本runc不适用于cgroupV2,必须切换到备用OCI运行时crun。

//安装crun,centos8系统自带
[root@localhost ~]# dnf -y install crun

//编辑/usr/share/containers/containers.conf 文件
Default OCI runtime
#
#runtime = "crun"   //取消本行注释
runtime = "runc"    //将此行注释

//创建一个容器,查看容器运行模式是否是crun
[root@localhost ~]# podman run -itd --name web -p 80:80 httpd
3e555303388b0da61de062ed03749eb2c3ec9080047654c6a3f0aef4b4c4e937
[root@localhost ~]# podman container inspect web | grep -i crun
        "OCIRuntime": "crun",
            "crun",

安装slirp4netns和fuse-overlayfs

在普通用户环境中使用Podman时,建议使用fuse-overlayfs而不是VFS文件系统,至少需要版本0.7.6。现在新版本默认就是了。

[root@localhost ~]# dnf -y install slirp4netns
[root@localhost ~]# dnf -y install fuse-overlayfs
[root@localhost ~]# vim /etc/containers/storage.conf
#mount_program = "/usr/bin/fuse-overlayfs"      //取消此行注释

subuid和subgid配置

Podman要求运行它的用户在/ etc / subuid和/ etc / subgid文件中列出一系列UID,shadow-utils或newuid包提供这些文件

[root@localhost ~]# dnf -y install shadow-utils
//可以在/ etc / subuid和/ etc / subgid查看,每个用户的值必须唯一且没有任何重叠。
[root@localhost ~]# useradd zic
[root@localhost ~]# cat /etc/subuid
zzd:100000:65536
zic:165536:65536
[root@localhost ~]# cat /etc/subgid
zzd:100000:65536
zic:165536:65536

//启动非特权ping
[root@localhost ~]# vim /etc/sysctl.conf
//添加如下内容
net.ipv4.ping_group_range = 0 200000 (表示uid从开始到200000的用户可用)

这个文件的格式是 USERNAME:UID:RANGE中/etc/passwd或输出中列出的用户名getpwent。

  • 为用户分配的初始 UID。
  • 为用户分配的 UID 范围的大小。

该usermod程序可用于为用户分配 UID 和 GID,而不是直接更新文件。

[root@localhost ~]# useradd zzz
//添加
[root@localhost ~]# usermod --add-subuids 300000-301000 --add-subgids 300000-301000 zic
[root@localhost ~]# cat /etc/subuid
zzd:100000:65536
zic:165536:65536
zzz:231072:65536
zic:300000:1001
//删除
[root@localhost ~]# usermod --del-subuids 300000-301000 --del-subgids 300000-301000 zic
[root@localhost ~]# cat /etc/subuid
zzd:100000:65536
zic:165536:65536
zzz:231072:65536

用户配置文件

三个主要的配置文件是 container.confstorage.confregistries.conf。用户可以根据需要修改这些文件。

container.conf

// 用户配置文件
[root@localhost ~]# cat /usr/share/containers/containers.conf
[root@localhost ~]# cat /etc/containers/containers.conf
[root@localhost ~]# cat ~/.config/containers/containers.conf  //优先级最高

配置storage.conf文件

1./etc/containers/storage.conf
2.$HOME/.config/containers/storage.conf

在普通用户中 /etc/containers/storage.conf的一些字段将被忽略

[root@localhost ~]#  vi /etc/containers/storage.conf
[storage]

Default Storage Driver, Must be set for proper operation.

driver = "overlay"    //此处改为overlay
.......

mount_program = "/usr/bin/fuse-overlayfs"    //取消注释

//如果版本为8以下,则需要做以下操作:
[root@localhost ~]# sysctl user.max_user_namespaces=15000
//或者
[root@localhost ~]# vim /etc/sysctl.conf
user.max_user_namepaces=15000

在普通用户中这些字段默认

runroot = "/run/containers/storage"
graphroot = "/var/lib/containers/storage"

registries.conf

配置按此顺序读入,这些文件不是默认创建的,可以从 /usr/share/containers或复制文件 /etc/containers并进行修改

1./etc/containers/registries.conf
2./etc/containers/registries.d/*
3.HOME/.config/containers/registries.conf

授权文件

此文件里面写了docker账号的密码,以加密方式显示

[root@localhost ~]# podman login
Username: ziczhou
Password:
Login Succeeded!

[root@localhost ~]# cat /run/user/0/containers/auth.json
{
        "auths": {
                "docker.io": {
                        "auth": "emljemhvdTp6emQyd2J5Li4u"
                }
        }

普通用户是无法看见root用户的镜像的

//root用户的镜像
[root@localhost ~]# podman images
REPOSITORY               TAG         IMAGE ID      CREATED      SIZE
docker.io/library/httpd  latest      f2a976f932ec  2 weeks ago  149 MB

//普通户用
[root@localhost ~]# su - zic
[zic@localhost ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

使用卷

  • 容器与root用户一起运行,则root容器中的用户实际上就是主机上的用户。
  • UID GID是在/etc/subuid和/etc/subgid等中用户映射中指定的第一个UID GID。
  • 如果普通用户的身份从主机目录挂载到容器中,并在该目录中以根用户身份创建文件,则会看到它实际上是你的用户在主机上拥有的。
[zic@localhost ~]$ podman run -it -v $(pwd)/date:/date:Z httpd /bin/bash
root@f6a726f506b1:/usr/local/apache2# cd /
root@f6a726f506b1:/# ls
bin  boot  date  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@f6a726f506b1:/# ls /date/
root@f6a726f506b1:/# cd /date/
root@f6a726f506b1:/date# touch 123
root@f6a726f506b1:/date# ls -l
total 0
-rw-r--r--. 1 root root 0 Aug 21 13:53 123

在主机上查看

[zic@localhost ~]$ ls $HOME/date
123

//写入内容
[zic@localhost ~]$ echo "Hello World!" > $HOME/date/123
[zic@localhost ~]$ cat $HOME/date/123
Hello World!

容器里查看

root@f6a726f506b1:/date# cat 123
Hello World!

//我们可以发现在容器里面的文件的属主和属组都属于root,那么如何才能让其属于zic用户呢?
root@f6a726f506b1:/date# ls -l
total 4
-rw-r--r--. 1 root root 13 Aug 21 13:56 123

//只要在运行容器的时候加上一个--userns=keep-id即可
[zic@localhost ~]$ podman run -it --name web1 -v $(pwd)/date:/date:Z --userns=keep-id httpd /bin/bash
zic@6412d55309af:/$ cd /date/
zic@6412d55309af:/date$ ls -l
total 4
-rw-r--r--. 1 zic zic 13 Aug 21 13:56 123

使用普通用户映射容器端口时会报” permission denied”的错误

//删除web1容器
[zic@localhost ~]$ podman rm -f web1

[zic@localhost ~]$ podman run -itd --name web1 -v $(pwd)/date:/date:Z -p 80:80 httpd
Error: rootlessport cannot expose privileged port 80, you can add 'net.ipv4.ip_unprivileged_port_start=80' to /etc/sysctl.conf (currently 1024), or choose a larger port number (>= 1024): listen tcp 0.0.0.0:80: bind: permission denied

//删除最近一次创建的容器,也就是web1
[zic@localhost ~]$ podman rm -fl

普通用户可以映射>= 1024的端口

[zic@localhost ~]$ podman run -itd --name web1 -p 1024:80  -v $(pwd)/date:/date:Z httpd
fd4d574396a42cde4822930d89acec6d597e1152ef5ad88a73a230bfa4e1aa65
[zic@localhost ~]$ podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS                 NAMES
fd4d574396a4  docker.io/library/httpd:latest  httpd-foreground  2 seconds ago  Up 2 seconds ago  0.0.0.0:1024->80/tcp  web1
[zic@localhost ~]$ ss -antl
State          Recv-Q         Send-Q                   Local Address:Port                   Peer Address:Port         Process
LISTEN         0              128                            0.0.0.0:111                         0.0.0.0:*
LISTEN         0              128                            0.0.0.0:22                          0.0.0.0:*
LISTEN         0              128                                  *:1024                              *:*
LISTEN         0              128                               [::]:111                            [::]:*
LISTEN         0              128                               [::]:22                             [::]:*

配置echo ‘net.ipv4.ip_unprivileged_port_start=80’ >> /etc/sysctl.conf后可以映射大于等于80的端口

//切换到root用户
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_unprivileged_port_start=80
[root@localhost ~]# sysctl -p
net.ipv4.ping_group_range = 0 200000
net.ipv4.ip_unprivileged_port_start = 80

//切换到zic用户
[root@localhost ~]# su - zic
Last login: Sun Aug 21 21:54:50 CST 2022 on pts/2

//创建容器
[zic@localhost ~]$ podman run -itd --name web2 -v $(pwd)/date:/date:Z -p 80:80 httpd
bdd64e999ce8f526af9d0bb93b091b39c188b2adf2e65608ffe72afda044eb38
[zic@localhost ~]$ podman ps
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS                 NAMES
fd4d574396a4  docker.io/library/httpd:latest  httpd-foreground  4 minutes ago  Up 4 minutes ago  0.0.0.0:1024->80/tcp  web1
bdd64e999ce8  docker.io/library/httpd:latest  httpd-foreground  5 seconds ago  Up 4 seconds ago  0.0.0.0:80->80/tcp    web2
[zic@localhost ~]$ ss -antl
State          Recv-Q         Send-Q                   Local Address:Port                   Peer Address:Port         Process
LISTEN         0              128                            0.0.0.0:111                         0.0.0.0:*
LISTEN         0              128                            0.0.0.0:22                          0.0.0.0:*
LISTEN         0              128                                  *:1024                              *:*
LISTEN         0              128                               [::]:111                            [::]:*
LISTEN         0              128                                  *:80                                *:*
LISTEN         0              128                               [::]:22                             [::]:*

Original: https://www.cnblogs.com/zicnotes/p/16611225.html
Author: Zic师傅
Title: podman无根用户基本设置和使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606920/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Linux之vim编辑器

    1.vim三种模式 模式 操作 可视模式 可查看内容 编辑模式 可查看可修改内容 命令行模式 给vim发送控制命令,可查看内容 注:打开文件,默认是可视模式 2.三种模式的切换 可…

    Linux 2023年6月6日
    099
  • 通过示例学习PYTORCH

    核心是:PyTorch提供了两个主要的特性: 一个n维的Tensor,与Numpy相似但可以在GPU上运行 构建和训练神经网络的自动微分 我们将使用一个三阶多项式拟合 (y=sin…

    Linux 2023年6月14日
    0112
  • R语言-tidyr和dplyr

    一、安装和加载 1、安装并加载tidyr和dplyr包 install.packages("tidyr") library(tidyr) install.pac…

    Linux 2023年6月8日
    099
  • 个人学习-Linux-IO多路复用

    [1]confirmwz博客:Epoll原理解析https://blog.csdn.net/armlinuxww/article/details/92803381; [2]hech…

    Linux 2023年6月6日
    086
  • CentOS7 安装高版本gcc, g++, gfortran等工具

    SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为用户提供一种方便、安全地安装和使用应用程序和运行时环境的多…

    Linux 2023年6月7日
    089
  • Redis安装及配置

    Linux Redis 安装教程 1 安装 下载安装包 官网下载链接我下载的版本是 redis-4.0.9.tar.gz 将下载的安装包上传到服务器(建议到/home/redis)…

    Linux 2023年6月7日
    0126
  • MySQL Performance Schema详解

    MySQL的performance schema 用于监控MySQL server在一个较低级别的运行过程中的资源消耗、资源等待等情况。 1 performance schema特…

    Linux 2023年6月13日
    0100
  • WEB自动化-09-Cypress 测试报告

    9 测试报告 一份好的测试报告,可以很直观的看出整个测试过程的各种数据。而Cypress的测试报告是 基于Mocha,因此任何支持Mocha的测试报告都可以应用于Cypress。但…

    Linux 2023年6月7日
    0124
  • Linux02:Vim使用及账号、磁盘、进程管理(狂神说)

    五、Vim编译器 1.什么是vim编译器 Vim相当于vi的升级版 Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使…

    Linux 2023年5月27日
    0118
  • 每天一个 HTTP 状态码 101

    101 Switch Protocols 指示服务器端响应了客户端切换协议的要求… 101 Switching Protocols 当客户端的请求具有 Upgrade …

    Linux 2023年6月7日
    0123
  • .NET Core 3.0, 发布将于今晚开始!

    期待已久的.NET Core 3.0即将发布! .NET Core 3.0在.NET Conf上发布。大约还有9个多小时后,.NET Conf开始启动。 第1天-9月23日 9:0…

    Linux 2023年6月7日
    089
  • Linux虚拟机上按安装jdk1.8.0

    Linux虚拟机上按安装jdk1.8.0 1.准备工作 jdk1.8.0下载地址: http://www.oracle.com/technetwork/java/javase/do…

    Linux 2023年6月11日
    089
  • 更新yum 源下载报错

    entos7.9 更换yum 源 为阿里云的之后,下载软件包报错 Failed connect to mirrors.aliyuncs.com:80; Connection tim…

    Linux 2023年6月14日
    089
  • Vim 编辑器|批量注释与批量取消注释

    添加注释 ctrl + v 进入块选泽模式。 上下键选中需要注释的行。 按大写 I 进入插入模式,输入注释符。 按两次 ESC 退出,即完成添加注释。 取消注释 ctrl + v …

    Linux 2023年5月27日
    0114
  • 最小化安装killall不可用

    最小化安装killall不可用 最小化安装 Centos7.4后,发现killall命令不可用使用了以下命令,查看软件包名: yum search killall 查找后发现应使用…

    Linux 2023年6月13日
    0107
  • MSSQL中游标的语法结构

    | 0.21分钟 | 342.4字符 | 1、引言&背景 2、开箱即用的游标结构 3、声明与参考资料 | SCscHero | 2022/4/30 PM10:3 | 系列 …

    Linux 2023年6月14日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球