无根容器中无法为指定用户和组设置ACL的问题求助
无根容器中无法为指定用户和组设置ACL的问题求助
大家好,我现在遇到一个关于无根Debian容器的ACL设置问题,想请教一下各位:
我在无根模式下运行Debian容器,通过runc --root /var/slurm/run/ run --bundle ~/containers/test01/ test01进入容器bash后,尝试给文件设置ACL时碰到了异常:
- 先创建测试文件:
touch test.txt - 尝试给
adm组设置ACL权限:setfacl -m g:adm:r-x test.txt
结果直接报错:setfacl: test.txt: Invalid argument
不止adm组,/etc/group里除了我自己主组之外的其他组都没法设置ACL,但给root用户设置ACL(setfacl -m u:root:r-x test.txt)却完全正常。
容器内当前用户的身份信息:
(base) root@runc:/# id uid=0(root) gid=0(root) groups=0(root),65534(nogroup)
我一开始以为是Linux能力(Caps)的问题,调整了相关配置但没解决,当前capsh的输出如下:
(base) root@runc:/# capsh --print Current: cap_fowner,cap_kill,cap_net_bind_service,cap_sys_admin,cap_audit_write=ep Bounding set =cap_fowner,cap_kill,cap_net_bind_service,cap_sys_admin,cap_audit_write Ambient set = Current IAB: !cap_chown,!cap_dac_override,!cap_dac_read_search,!cap_fsetid,!cap_setgid,!cap_setuid,!cap_setpcap,!cap_linux_immutable,!cap_net_broadcast,!cap_net_admin,!cap_net_raw,!cap_ipc_lock,!cap_ipc_owner,!cap_sys_module,!cap_sys_rawio,!cap_sys_chroot,!cap_sys_ptrace,!cap_sys_pacct,!cap_sys_boot,!cap_sys_nice,!cap_sys_resource,!cap_sys_time,!cap_sys_tty_config,!cap_mknod,!cap_lease,!cap_audit_control,!cap_setfcap,!cap_mac_override,!cap_mac_admin,!cap_syslog,!cap_wake_alarm,!cap_block_suspend,!cap_audit_read,!cap_perfmon,!cap_bpf,!cap_checkpoint_restore Securebits: 00/0x0/1'b0 secure-noroot: no (unlocked) secure-no-suid-fixup: no (unlocked) secure-keep-caps: no (unlocked) secure-no-ambient-raise: no (unlocked) uid=0(root) euid=0(root) gid=0(root) groups=0(root),65534(nogroup),65534(nogroup),65534(nogroup),65534(nogroup) Guessed mode: UNCERTAIN (0)
另外,给root之外的其他用户设置ACL也会出现同样的错误。
补充思考
后来我了解到subgid的相关内容,对无根容器的用户/组命名空间映射有了新的理解,容器内的/proc/self/gid_map内容显示:
(base) root@runc:/# cat /proc/self/gid_map 0 1000 1
这里能看到容器内的root组(gid=0)被映射到主机的gid=1000(也就是启动无根容器的用户的主组),但映射范围只有1。我怀疑是不是因为这个映射范围的限制,导致容器内其他组(比如adm)没有对应的主机组映射,所以没法执行chgrp adm foo这类操作?
有没有大佬能给我一些提示或者解决思路?非常感谢!
备注:内容来源于stack exchange,提问作者csmj
相关产品推荐
相关产品推荐

