在以 root 身份运行的 Ansible playbook 中以非 root 用户身份创建 podman 容器

在以 root 身份运行的 Ansible playbook 中以非 root 用户身份创建 podman 容器

是否可以使用命名空间在与运行 Ansible 剧本的用户不同的用户下创建 Podman 容器?

我正在为我的虚拟专用服务器编写一个 Ansible 剧本。该剧本创建一个 sudo 用户,进行一些配置,然后安装 Podman。我使用 运行此剧本ansible-playbook playbook.yaml --ask-vault-pass --user=root --ask-pass,因此它以 root 身份运行(全新安装操作系统后没有其他用户)。

然后轮到安装容器了。我使用以下示例基本任务:

- name: Install Sheetable
  containers.podman.podman_container:
    name: Sheetable
    image: docker.io/vallezw/sheetable
    state: started
    restart_policy: always
    ports:
      - "3333:8080"
    volumes:
      - /home/user/sheetable:/app/config
      - /etc/localtime:/etc/localtime:ro
    env:
      ADMIN_EMAIL="{{ sheetable_admin }}"
      ADMIN_PASSWORD="{{ sheetable_password }}"

由于这是以 root 身份安装的,但我想安装为user安装官方文档,我进行了以下测试。对于以下测试,uid=1000gid=1000,也<user>:100000:65536存在于两者中/etc/subuid/etc/subgid文件。

  • userns: "keep-id":没有错误,根本没有创建容器(无论是在容器下还是在根容器下)
  • userns: "keep-id:uid=1000,gid=1000":没有错误,根本没有创建容器(无论是在容器下还是在根容器下)
  • userns: "keep-id:uid=100000,gid=100000" 没有错误,根本没有创建容器(无论是在容器下还是在根容器下)
  • userns: "auto"+ 添加containers:2147483647:2147483648/etc/subuid/etc/subgid文件:没有错误,根本没有创建容器(无论是在容器下还是在根目录下)
  • user: 1000:1000+userns: "keep-id:uid=1000,gid=1000":错误:keep-id 仅在无根模式下受支持
  • user: "user:user"+userns: "keep-id:uid=1000,gid=1000":错误:keep-id 仅在无根模式下受支持
  • userns: "auto:uidmapping=0:1000:65536":没有错误,在root下创建一个容器。
  • userns: "auto:uidmapping=1000:0:65536":错误:为容器安装存储并创建覆盖安装的权限被拒绝卸载 /var/lib/containers.../merged:参数无效
  • userns: "auto:uidmapping=1000:1000:65536":错误:为容器安装存储并创建覆盖安装的权限被拒绝卸载 /var/lib/containers.../merged:参数无效
  • userns: "ns:<user>":错误:为容器安装存储并创建覆盖安装的权限被拒绝卸载 /var/lib/containers.../merged:参数无效

我知道我可以使用权限提升,并且以下任务可以按预期进行:

- name: Install Sheetable
  become: true
  become_user: "{{ user_name }}"
  containers.podman.podman_container:
    name: Sheetable
    image: docker.io/vallezw/sheetable
    state: started
    restart_policy: always
    ports:
      - "3333:8080"
    volumes:
      - /home/"{{ user_name }}"/sheetable:/app/config
      - /etc/localtime:/etc/localtime:ro
    env:
      ADMIN_EMAIL="{{ sheetable_admin }}"
      ADMIN_PASSWORD="{{ sheetable_password }}"

但首先,我不确定这是否是一种可行的方法,其次,我收到了警告

模块 remote_tmp /home/user/.ansible/tmp 不存在,并以 0700 模式创建,这可能会导致以其他用户身份运行时出现问题。为避免这种情况,请手动创建具有正确权限的 remote_tmp 目录

是否可以在与运行 Ansible 剧本的用户不同的用户下创建 Podman 容器?

答案1

你的答案就在这里 -->https://www.redhat.com/sysadmin/sudo-rootless-podman

基本上你已经使用了

  become: true
  become_user: "{{ user_name }}"

它不会为该用户创建登录会话,因此在运行无根 podman 时会出现问题。如果您想运行此游戏,请确保您不使用上面的内容,而是ssh使用此用户进入机器(即使用ansible_ssh_user映射到运行 podman 容器的用户的变量)

相关内容