Ubuntu系统下Postfix邮件服务器新建用户时的UID与GID分配异常问题
Ubuntu系统下Postfix邮件服务器新建用户时的UID与GID分配异常问题
嗨,我来帮你搞定这个新建用户时的从属UID/GID分配问题!从你描述的情况来看,核心原因是系统的从属UID/GID资源池已经快耗尽了,咱们一步步来分析和解决:
问题本质拆解
你用useradd -m testuser创建用户时收到的错误,说明系统没法给新用户分配一段唯一的从属UID/GID范围。而你提到删除/etc/subuid或/etc/subgid里的一条旧条目就能新建用户,正好印证了这一点——当前可用的从属ID范围已经被现有用户占满了。
默认情况下,Ubuntu每个用户会分配65536个从属UID/GID(就是你原来login.defs里的SUB_UID_COUNT和SUB_GID_COUNT值),总可用范围是SUB_UID_MAX - SUB_UID_MIN + 1。用这个总范围除以每个用户的分配数,就是系统最多能创建的用户数,现在你的用户数已经接近这个上限了。
具体解决方案
1. 先确认当前资源使用情况
先跑几个命令摸清现状:
- 统计现有从属ID条目数:
cat /etc/subuid | wc -l cat /etc/subgid | wc -l - 计算理论最大用户数:
假设你原来的配置是SUB_UID_MIN=100000、SUB_UID_MAX=600100000,总可用数是600100000 - 100000 + 1 = 600000001,除以65536大概能支持9155个用户。你当前的62072个条目明显超过这个数值,这就是问题根源。
2. 扩大从属ID资源池(最常用的解决方法)
编辑/etc/login.defs,根据你的场景选择调整方式:
- 如果你想保留每个用户65536个从属ID的配置,就扩大总范围上限:
SUB_UID_MAX 1600100000 # 把原来的600100000调大,比如改成16亿级 SUB_GID_MAX 1600100000 - 如果你的场景不需要这么多从属ID(比如只是用来管理邮箱,不需要大量容器/隔离场景),可以减少每个用户的分配数量:
SUB_UID_COUNT 1024 # 从65536改成1024,同样范围能支持更多用户 SUB_GID_COUNT 1024
修改后保存文件即可,这个配置对新建用户生效,已有的用户从属ID范围不会改变。
3. 清理无效的从属ID条目
有些用户可能已经被删除,但他们的从属ID条目还留在/etc/subuid和/etc/subgid里,浪费资源。可以用以下命令找出这些无效用户:
# 找出不在/etc/passwd里的subuid用户 comm -23 <(sort /etc/subuid | cut -d: -f1) <(sort /etc/passwd | cut -d: -f1) # 同理找出subgid里的无效用户 comm -23 <(sort /etc/subgid | cut -d: -f1) <(sort /etc/passwd | cut -d: -f1)
然后手动删除这些用户在/etc/subuid和/etc/subgid里的对应行,就能释放出可用范围。
4. 验证修改效果
修改完成后,直接创建测试用户:
useradd -m testuser
如果没报错,再检查新用户的从属ID是否正常分配:
grep testuser /etc/subuid /etc/subgid
额外注意事项
- 这个问题本质是系统用户管理的从属ID资源问题,和Postfix本身无关,只是你用这些用户来管理邮箱而已,修改后不需要重启Postfix。
- 如果需要批量创建大量用户,建议先调整好
login.defs的配置,避免反复遇到这个问题。
备注:内容来源于stack exchange,提问作者parthi2211
相关产品推荐
相关产品推荐

