首页 > 其他分享 >podman无根模式

podman无根模式

时间:2022-08-16 19:23:02浏览次数:63  
标签:conf etc 0.0 模式 podman zz 无根 root localhost


目录

podman无根模式

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

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

[root@localhost ~]# yum -y install crun     //centos8系统自带
[root@localhost ~]# vim /usr/share/containers/containers.conf 
runtime = "crun"      
#runtime = "runc"
[root@localhost ~]# podman run -d --name web -p 8088:80 httpd
c38887b81d73e7b4ae511c68ddee01fc753d8b902380c4bb8da9dfcf1457fa76
[root@localhost ~]# 
[root@localhost ~]# podman ps 
CONTAINER ID  IMAGE                           COMMAND           CREATED        STATUS            PORTS                 NAMES
c38887b81d73  docker.io/library/httpd:latest  httpd-foreground  5 seconds ago  Up 5 seconds ago  0.0.0.0:8088->80/tcp  web
[root@localhost ~]# podman inspect web |grep crun
        "OCIRuntime": "crun",
            "crun",

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

[root@localhost ~]# vi /etc/containers/storage.conf 
mount_program = "/usr/bin/fuse-overlayfs"   //取消注释

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

[root@localhost ~]# useradd zz
[root@localhost ~]# cat /etc/subuid
zz:100000:65536
[root@localhost ~]# cat /etc/subgid
zz:100000:65536

// 启动非特权ping 
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ping_group_range=0 300000

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

  • 为用户分配的初始 UID。
  • 为用户分配的 UID 范围的大小。
    该usermod程序可用于为用户分配 UID 和 GID,而不是直接更新文件
[root@localhost ~]# useradd hh
[root@localhost ~]# cat /etc/subuid
zz:100000:65536
hh:165536:65536
[root@localhost ~]# usermod --del-subuids 165536-231072 --del-subgids 165536-231072 hh 
[root@localhost ~]# cat /etc/subuid
zz:100000:65536
[root@localhost ~]# usermod --add-subuids 200000-201000 --add-subgids 200000-201000 hh
[root@localhost ~]# cat /etc/subuid
zz:100000:65536
hh:200000:1001

用户配置文件

三个主要的配置文件是container.conf、storage.conf和registries.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

registries.conf

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

普通用户和root用户是看不到对方的镜像的

//root用户
[root@localhost ~]# podman images
REPOSITORY                            TAG         IMAGE ID      CREATED       SIZE
docker.io/library/httpd               latest      f2a976f932ec  2 weeks ago   149 MB
docker.io/library/busybox             latest      7a80323521cc  2 weeks ago   1.47 MB
localhost/zzking1/busybox             v0.1        7a80323521cc  2 weeks ago   1.47 MB
docker.io/library/alpine              latest      c059bfaa849c  8 months ago  5.87 MB
192.168.26.132/apline                 v0.1        c059bfaa849c  8 months ago  5.87 MB
registry.fedoraproject.org/f29/httpd  latest      25c76f9dcdb5  3 years ago   482 MB
//普通用户
[root@localhost ~]# su - zz
[zz@localhost ~]$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE

  • 容器与root用户一起运行,则root容器中的用户实际上就是主机上的用户。
  • UID GID是在/etc/subuid和/etc/subgid等中用户映射中指定的第一个UID GID。
  • 如果普通用户的身份从主机目录挂载到容器中,并在该目录中以根用户身份创建文件,则会看到它实际上是你的用户在主机上拥有的

使用卷

[root@localhost ~]# su - zz
Last login: Tue Aug 16 18:18:28 CST 2022 on pts/0
[zz@localhost ~]$ pwd
/home/zz
[zz@localhost ~]$ mkdir /home/zz/data
[zz@localhost ~]$ podman run -it --name z1 -v /home/zz/data/:/data:Z busybox /bin/sh
/ # ls
bin   data  dev   etc   home  proc  root  run   sys   tmp   usr   var
/ # cd data/
/data # ls
/data # touch 123
/data # ls -l
total 0
-rw-r--r--    1 root     root             0 Aug 16 10:25 123

在主机上查看

[zz@localhost ~]$ ll data/
total 0
-rw-r--r--. 1 zz zz 0 Aug 16 18:25 123
[zz@localhost ~]$ echo "hell world" >> 123
[zz@localhost ~]$ cat 123 
hell world

容器里查看

/data # cat 123 
hell world
//我们可以发现在容器里面的文件的属主和属组都属于root,那么如何才能让其属于tom用户呢?下面告诉你答案
/data # ls -l
total 4
-rw-rw-r--    1 root     root            11 Aug 16 10:37 123
//只要在运行容器的时候加上一个--userns=keep-id即可
[zz@localhost ~]$ podman run -it --name z1 -v /home/zz/data/:/data:Z  --userns=keep-id busybox /bin/sh
~ $ cd data/
/data $ ls -l
total 4
-rw-rw-r--    1 zz       zz              11 Aug 16 10:37 123

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

[zz@localhost ~]$ podman run -d -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

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

[root@localhost ~]# vim /etc/sysctl.conf 
net.ipv4.ip_unprivileged_port_start=80
[root@localhost ~]# sysctl -p
net.ipv4.ping_group_range = 0 300000
net.ipv4.ip_unprivileged_port_start = 80
[zz@localhost ~]$ podman run -d -p 80:80 httpd
60fbbe2db63ce8c23f5d779ed3aadc69ad8184d7c21cd2621f0c22a33fffb6dc
[zz@localhost ~]$ ss -anlt
State   Recv-Q  Send-Q    Local Address:Port     Peer Address:Port  Process  
LISTEN  0       128             0.0.0.0:22            0.0.0.0:*              
LISTEN  0       128             0.0.0.0:8088          0.0.0.0:*              
LISTEN  0       128                   *:80                  *:*              
LISTEN  0       128                [::]:22               [::]:*  

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

[zz@localhost ~]$ podman run -d -p 1024:80 httpd
d5a67001083d481e1f2dafc9bb367f1f0d6482795ce4a6ef2b6ee1e0f9ecaa20
[zz@localhost ~]$ ss -antl
State   Recv-Q  Send-Q    Local Address:Port     Peer Address:Port  Process  
LISTEN  0       128             0.0.0.0:22            0.0.0.0:*              
LISTEN  0       128             0.0.0.0:8088          0.0.0.0:*              
LISTEN  0       128                   *:80                  *:*              
LISTEN  0       128                [::]:22               [::]:*              
LISTEN  0       128                   *:1024                *:*   

标签:conf,etc,0.0,模式,podman,zz,无根,root,localhost
From: https://www.cnblogs.com/z696/p/16592677.html

相关文章

  • computed的原始模式 : get 和 set
    //完整的写法:fullname:{get:function(){returnthis.firstname+""+this.lastname},set:fun......
  • 项目中,需要对设备上线离线的动作做日志打印. (利用redis发布订阅监听key解决. 观
    https://blog.csdn.net/weixin_44642403/article/details/116278262?ops_request_misc=&request_id=&biz_id=102&utm_term=redis%E7%9B%91%E5%90%ACkey%E5%9C%A8%E4%BB%80%......
  • 安卓鸿蒙开发者模式配置
    1首先需要打开【设置】2找到:系统---关于手机3打开看到鸿蒙系统的相关参数   看到版本号:2.0.0.140(C11*****)CPUturbo(每个人的不一样)连续点击五次;出现重新画开机......
  • 记Windows服务器Redis 6379被攻击 被设置主从模式同步项目数据
    在工作中第一次经历被攻击,我是一个前端,同时复负责维护一个已上线的项目,在最近一段时间小程序与后台经常出现这个报错,搜了下说我的从机是只读模式,不能写入,问了同事得知这......
  • 找出对应的设计模式-优化下面的场景开发。
    packagecom.iit.observer;//研究性的作业://业务场景:(到了吃饭时间)管理员就调用sendMsg方法,//需要向Cat和Dog发送一条消息。//发布,关注(订阅):Cat和Dog关注......
  • 设计模式22 state状态模式
       状态模式应用的场景 -----工作流,闸口,  投票--几次正常超过多少警告刷票。把几个不同的状态找出相同的方法  定一个抽象类。实现和重写抽象基类, ......
  • mysql子查询和连接查询_seata和普通XA模式的区别_nacos和eureka对比
    mysql子查询和连接查询首先是in和Exist的区别,in是对内查询的每个结果会去外层表里面进行循环,Exist则是对外层的记录去内层记录里面去遍历,所以如果外查询表比较大的话使用E......
  • 设计模式——创建型设计模式
    创建型设计模式争对对象/类创建时的优化工厂方法模式(了解)通过定义顶层抽象工厂类,通过继承的方式,针对于每一个产品都提供一个工厂类用于创建。情况:只适用于简单对象,......
  • podman的基本设置和使用
    podman的基本设置和使用目录podman的基本设置和使用运行httpd示例容器列出和检查正在运行的容器测试httpd服务器查看容器日志查看容器的进程对容器执行检查操作还原容器......
  • podman的基本用法
    目录podman的基本设置和使用运行示例容器列出正在运行的容器检查正在运行的容器测试httpd服务器查看容器的日志查看容器的pid检查点容器恢复容器迁移容器停止容器删除容......