是否可以使用命名空间在与运行 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=1000
和gid=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 容器的用户的变量)