You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:39:35