每当我这样做时
# useradd -N --gid 1003 -s /bin/ksh --uid <some UID starting with 10027> --home /home/<someuser> <someuser>
useradd 只是拒绝添加任何用户并打印:
useradd: Can't get unique secondary UID range
useradd: can't find subordinate user range
只是告诉你,它/etc/passwd
有 9056 行长。
可能是什么问题呢?
答案1
按照用户添加(8),它创建为每个用户保留的 SUB_UID_COUNT 个辅助 uid 范围
SUB_UID_MIN
(数字),SUB_UID_MAX
(数字),SUB_UID_COUNT
(数字)如果
/etc/subuid
存在,命令useradd
和newusers
(除非用户已经有从属用户 ID)为每个新用户分配范围 内SUB_UID_COUNT
未使用的用户 ID 。SUB_UID_MIN
SUB_UID_MAX
SUB_UID_MIN
、SUB_UID_MAX
、的默认值SUB_UID_COUNT
分别为 100000、600100000 和 10000。
看起来您已达到默认限制,因此useradd
失败。
答案2
useradd
抱怨它无法为新用户分配从属 UID 范围,因为允许的 UID 范围已用完。正如您所指出的,您的系统中有很多用户,并且配置的默认值无法login.defs
处理。
从属 UID/GID 文件用于为用户命名空间设置 UID/GID 映射(请参阅subuid(5)
,subgid(5)
,newuidmap(1)
, 和 newgidmap(1)
)。
就我而言,我的系统中有 10000 多个 UID,并且 useradd
失败并出现完全相同的错误。我不想useradd
管理subuid
和subgid
数据库,因为我不需要配置任何自定义 ID 映射,因此我禁用了此功能。这可以通过删除/etc/subuid
和文件来完成/etc/subgid
。
对于最新版本的影子实用程序(自 4.9或者),设置SUB_UID_COUNT 0
和 SUB_GID_COUNT 0
在你的/etc/login.defs
也有效。看login.defs(5)
了解详情。