在Linux系统管理中,我们经常需要创建新的用户,默认情况下,当你使用 useradd 命令创建一个新用户时,系统通常会自动创建一个与该用户名同名的用户组,并将其作为该用户的主组,这被称为用户私有组机制。
但在某些特定场景下(例如共享开发环境、ftp账户限制等),我们可能不希望创建这个同名的私有组,而是希望该用户归属于某个已存在的公共组,或者暂时不归属于特定的私有组。
虽然Linux系统中每个用户必须拥有一个主组ID(GID),无法真正做到“完全没有组”,但我们可以通过参数阻止创建同名组,并将其分配给现有的通用组(如 users 或 nogroup)。

以下是实现这一目标的两种常用方法。
使用 -N (no-user-group) 参数
这是最直接的方法。-N 参数告诉系统不要创建与用户同名的用户组,而是将用户添加到系统默认的组中(通常是 /etc/default/useradd 文件中定义的组,在很多发行版中是 users 或 nogroup)。
命令语法:
useradd -N 用户名
操作示例:
-
创建用户: 假设我们要创建一个名为
testuser的用户,且不创建testuser组:sudo useradd -N testuser
-
设置密码:
sudo passwd testuser
-
验证结果: 使用
id命令查看用户信息:id testuser
输出可能如下:
uid=1001(testuser) gid=100(users) groups=100(users)
注意:可以看到
gid指向了users组,而不是testuser组。
使用 -g 参数指定现有组
如果你不想使用系统默认组,而是想明确指定该用户属于哪个现有的组(例如将其加入到 nogroup 组,或者 dev 组),可以使用 -g 参数。
前提条件: 指定的组必须已经存在。
命令语法:
useradd -g 已存在的组名 用户名
操作示例:
-
创建用户并指定到
nogroup组: 有些管理员为了体现“无组”的概念,会将用户指定给nogroup(或nobody)。sudo useradd -g nogroup myuser
-
验证结果:

