无根用户管理podman

无根用户管理podman


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

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

[root@localhost ~]# dnf -y install crun     //centos8自带
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 6:48:58 ago on Tue Aug 16 12:24:31 2022.
Dependencies resolved.
[root@localhost ~]# rpm -qa | grep crun
crun-1.0-1.module_el8.5.0+911+f19012f9.x86_64
[root@192 ~]# vim  /usr/share/containers/containers.conf
runtime = "crun"   //取消这一行注释
#runtime = "runc"   //这一行加上注释

[root@localhost ~]# podman run -d --name web1 -p 80:80 httpd
c399e2dbfdda9b5a43778968754b9af01c97929f0277cd42b2ed0bb4945f0746
[root@localhost ~]# podman ps
CONTAINER ID  IMAGE                                        COMMAND               CREATED        STATUS            PORTS               NAMES
c399e2dbfdda  registry.fedoraproject.org/f29/httpd:latest  /usr/bin/run-http...  7 seconds ago  Up 7 seconds ago  0.0.0.0:80->80/tcp  web1
[root@localhost ~]# podman inspect -l | grep crun
        "OCIRuntime": "crun",
            "crun",

安装slirp4netns和fuse-overlayfs

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

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


/ etc / subuid和/ etc / subgid配置

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

[root@192 ~]# useradd lx
[root@192 ~]# cat /etc/subuid
lx:100000:65536
[root@192 ~]#  cat /etc/subgid
lx:100000:65536
// 启动非特权ping 
[root@192 ~]# vim /etc/sysctl.conf   //永久修改
net.ipv4.ping_group_range = 0 200000  大于100000这个就表示lx可以操作podman

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

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

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

[root@192 ~]#  cat /etc/subgid
lx:100000:65536
nidaye:165536:65536
[root@192 ~]# 
[root@192 ~]#  usermod --add-subuids 200000-201000 --add-subgids 200000-201000 nidaye
[root@192 ~]#  cat /etc/subgid
lx:100000:65536
nidaye:165536:65536
[root@192 ~]# 

用户配置文件

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

container.conf

cat /usr/share/containers/containers.conf   //优先级最低
cat /etc/containers/containers.conf
cat ~/.config/containers/containers.conf   //优先级最高

storage.conf

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

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

[root@192 ~]# vim /etc/containers/storage.conf 
# Default Storage Driver, Must be set for proper operation.
driver = "overlay"    #此处改为overlay  一般默认就是不用改
.......
mount_program = "/usr/bin/fuse-overlayfs"    #取消注释

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@192 ~]# podman login
Username: xiaoapihai123
Password: 
Error: error logging into "docker.io": invalid username/password
[root@192 ~]# podman login
Username: xiaopihai123
Password: 
Login Succeeded!
[root@192 ~]# cat /run/user/0/containers/auth.json 
{
        "auths": {
                "docker.io": {
                        "auth": "eGlhb3BpaGFpMTIzOjIwMDIwNDI0bHg="
                }
        }
}[root@192 ~]# 

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

[root@192 ~]# podman images
REPOSITORY                            TAG         IMAGE ID      CREATED      SIZE
docker.io/library/alpine              latest      9c6f07244728  7 days ago   5.83 MB
localhost/xiaopihai123/alpine         v0.1        9c6f07244728  7 days ago   5.83 MB
docker.io/library/busybox             latest      7a80323521cc  2 weeks ago  1.47 MB
registry.fedoraproject.org/f29/httpd  latest      25c76f9dcdb5  3 years ago  482 MB
[root@192 ~]# su - lx
[lx@192 ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

无根用户的卷管理

  • 容器与root用户一起运行,则root容器中的用户实际上就是主机上的用户。
  • UID GID是在/etc/subuid和/etc/subgid等中用户映射中指定的第一个UID GID。
  • 如果普通用户的身份从主机目录挂载到容器中,并在该目录中以根用户身份创建文件,则会看到它实际上是你的用户在主机上拥有的。
[root@192 ~]# su - lx
[lx@192 ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
[lx@192 ~]$ pwd
/home/lx
[lx@192 ~]$ mkdir /home/lx/data
[lx@192 ~]$ podman run -it -v "$(pwd)"/data:/data docker.io/library/busybox /bin/sh
Trying to pull docker.io/library/busybox:latest...
Getting image source signatures
Copying blob 50783e0dfb64 done  
Copying config 7a80323521 done  
Writing manifest to image destination
Storing signatures
/ # ls
bin   data  dev   etc   home  proc  root  run   sys   tmp   usr   var
/ # cd /data/
/data # ls
/data # touch lxx
/data # ls -l
total 0
-rw-r--r--    1 root     root             0 Aug 17 04:28 lxx
/data # cat lxx
/data # ls
lxx
在主机上查看
[lx@192 ~]$ ll data/
total 0
-rw-r--r-- 1 lx lx 0 Aug 17 12:28 lxx
往里面写入东西
[lx@192 data]$ echo "hell world" >> lxx
回到容器查看
/data # cat lxx

hell world

我们可以发现在容器里面的文件的属主和属组都属于root
让其属于tom用户,只需要在运行容器的时候加上一个--userns=keep-id即可。
[lx@192 ~]$ podman run -it --name test -v "$(pwd)"/data:/data --userns=keep-id docker.io/library/busybox /bin/sh
~ $ ls
bin   data  dev   etc   home  proc  root  run   sys   tmp   usr   var
~ $ cd data/
/data $ ls -l
total 4
-rw-r--r--    1 lx       lx               0 Aug 17 04:32 123
-rw-r--r--    1 lx       lx              12 Aug 17 04:32 lxx

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

[lx@192 data]$ podman run -d -p 80:80 nginx
Resolving "nginx" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/nginx:latest...

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

[root@192 ~]# vim /etc/sysctl.conf 
[root@192 ~]# sysctl -p
net.ipv4.ping_group_range = 0 200000
net.ipv4.ip_unprivileged_port_start = 80

再次拉取

[lx@192 data]$ podman run -d -p 80:80 nginx
Resolving "nginx" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob 6a17c8e7063d done  
Copying blob 05396a986fd3 done  
Copying blob baf2da91597d [======>------------------------------] 4.8MiB / 24.2MiB
Copying blob b1349eea8fc5 done  
Copying blob 1efc276f4ff9 [=====>-------------------------------] 5.2MiB / 29.9MiB
Copying blob 27e0d286aeab done  

Copying blob baf2da91597d [==>------------------------------] 4.8MiB / 24.2MiB
Copying blob b1349eea8fc5 done
Copying blob 1efc276f4ff9 [
=>-------------------------------] 5.2MiB / 29.9MiB
Copying blob 27e0d286aeab done


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值