为何User Namespaces中映射范围长度大于1时触发权限错误?
User Namespaces ID映射范围过长触发权限错误的原因
问题场景
执行以下命令时出现权限错误:
xx@xx:~$./userns -U -M '0 100000 65536' -G '0 100000 65535' bash ERROR: write /proc/414325/uid_map: Operation not permitted
但执行这条命令时却能正常运行:
./userns -U -M '0 100000 65536' -G '0 100000 1' bash
操作系统:Ubuntu
原因分析
- Ubuntu默认给普通用户使用User Namespaces加了限制:当要映射的用户/组ID范围长度大于1时,系统会强制检查
/etc/subuid和/etc/subgid配置文件。 - 这两个文件用于给普通用户预分配可用于User Namespaces的连续ID段,如果你的用户没有在里面配置足够的ID范围,内核就会拒绝写入
uid_map或gid_map,直接抛出"Operation not permitted"错误。 - 而映射范围长度为1的情况是特例,Ubuntu默认允许普通用户不用预配置就能做这种一对一的简单映射,算是降低了基础使用场景的权限门槛。
解决办法
- 先检查当前用户的subuid/subgid配置:
grep $USER /etc/subuid /etc/subgid - 如果没有配置,用
usermod给用户分配对应的ID范围:sudo usermod --add-subuids 100000-165535 $USER sudo usermod --add-subgids 100000-165535 $USER - 重新登录会话让配置生效,之后再执行原命令就能正常运行了。
内容的提问来源于stack exchange,提问作者stackflow-crystal
相关产品推荐
相关产品推荐

