useradd 命令用于在 Linux 系统中创建新的用户账户,它会更新系统文件(如 /etc/passwd, /etc/shadow, /etc/group 等)以反映新用户的创建。

基本语法
useradd [选项] 用户名
[选项]:用于控制新用户账户的创建方式,如设置主目录、登录 Shell、用户组等。用户名:你想要创建的新用户的名称。
常用选项及详解
useradd 的功能非常强大,主要通过不同的选项来定制用户。
a. -m 或 --create-home (创建家目录)
这是最常用、最重要的选项之一,默认情况下,useradd 不会为新用户创建家目录。
- 作用:在
/home/目录下为新用户创建一个与用户名同名的家目录,并将默认的配置文件(如.bashrc,.profile等)复制到该目录中。 - 强烈建议:每次创建用户时都带上此选项。
# 创建用户 testuser,并同时创建其家目录 /home/testuser sudo useradd -m testuser
b. -d 或 --home-dir (指定家目录)
- 作用:指定用户的家目录路径,如果使用
-d但没有使用-m,目录不会被自动创建。 - 用法:通常与
-m结合使用,以创建一个非默认位置的家目录。
# 创建用户 devuser,家目录指定为 /data/devusers/devuser # -m 会确保该目录被创建 sudo useradd -m -d /data/devusers/devuser devuser
c. -s 或 --shell (指定登录 Shell)
- 作用:指定用户登录后使用的 Shell。
- 常用 Shell:
/bin/bash:最常用的 Bourne-Again Shell,功能强大。/bin/sh:Bourne Shell,一个更轻量级的 Shell。/sbin/nologin或/usr/sbin/nologin:禁止用户登录,这对于创建只用来运行服务的账户非常有用。/bin/false:与nologin类似,也用于禁止登录。
# 创建一个名为 gituser 的用户,禁止其通过 SSH 或控制台登录 sudo useradd -m -s /sbin/nologin gituser
d. -g 或 --gid (指定主 GID)
- 作用:指定用户所属的主组(Primary Group)的 GID(Group ID)。
- 注意:组必须已经存在。
# 假设组 developers (GID 为 1001) 已存在 # 创建用户 dev1,并将其主组设置为 developers sudo useradd -m -g developers dev1
e. -G 或 --groups (指定附加组)
- 作用:指定用户所属的附加组(Supplementary Groups),用户可以同时属于多个附加组。
- 注意:组必须已经存在,如果要指定多个附加组,用逗号 分隔。
# 假设组 sudo, docker, developers 已存在 # 创建用户 dev2,主组为 users,同时附加到 sudo, docker, developers 组 sudo useradd -m -g users -G sudo,docker,developers dev2
f. -c 或 --comment (添加注释)
- 作用:添加用户的注释信息,通常用于填写用户的真实姓名或描述,这个信息会保存在
/etc/passwd文件的第五个字段。
# 创建用户 zhangsan,并添加注释 "Zhang San - Developer" sudo useradd -m -c "Zhang San - Developer" zhangsan
g. -u 或 --uid (指定 UID)
- 作用:指定用户的 UID(User ID),系统通常会自动分配一个唯一的 UID(从 1000 开始),但有时你可能需要为特定用户指定一个固定的 UID,尤其是在迁移系统或需要统一 ID 环境时。
- 注意:UID 必须是系统中唯一的。
# 创建用户 lisi,并指定其 UID 为 2000 sudo useradd -m -u 2000 lisi
实践示例
示例1:创建一个标准开发用户
这是一个非常常见的场景,创建一个可以登录系统、使用 sudo 提权的开发者。
# 1. 首先创建一个开发者组(如果不存在) sudo groupadd developers # 2. 创建用户 alice,设置其主组为 developers,附加到 sudo 组,并设置注释 sudo useradd -m -g developers -G sudo -c "Alice Wang - Full Stack Developer" alice
示例2:创建一个只运行服务的系统账户
这个账户不需要登录,只用来运行某个特定服务(如 Nginx、MySQL)。

# 创建用户 nginx,禁止登录,家目录设为 /var/www/nginx sudo useradd -r -d /var/www/nginx -s /sbin/nologin nginx
注意:这里的
-r选项是创建系统用户的专用选项,它会创建一个 UID 小于 1000 的系统账户,并且没有家目录和过期时间。
示例3:创建一个没有家目录的用户
某些情况下,你可能只需要一个用户来运行脚本,不需要家目录。
# 创建用户 runner,不创建家目录,并禁止登录 sudo useradd -s /sbin/nologin runner
与 useradd 相关的重要文件
当你执行 useradd 后,系统会修改以下几个核心文件:
/etc/passwd:用户账户信息文件,每一行代表一个用户,格式为用户名:密码占位符:UID:GID:注释:家目录:登录Shell。testuser:x:1001:1001::/home/testuser:/bin/bash
/etc/shadow:用户密码和账户过期信息文件,包含加密后的密码、密码过期策略等,只有 root 可读。/etc/group:组信息文件,定义了系统中的所有组。/etc/gshadow:组密码信息文件,用于管理组的成员和组管理员。/etc/default/useradd或/etc/login.defs:useradd命令的默认配置文件,你可以在这里修改useradd的默认行为,比如默认的 Shell、家目录前缀、UID 范围等。
useradd vs. adduser
在 Linux 世界中,你可能会遇到另一个命令 adduser,它们有本质区别:

| 特性 | useradd |
adduser |
|---|---|---|
| 类型 | 一个命令行工具,来自 shadow 软件包。 |
一个交互式脚本,来自 debconf (Debian/Ubuntu) 或 util-linux (其他发行版)。 |
| 行为 | 非交互式,所有配置必须通过命令行选项提供,没有选项时,行为非常基础(不创建家目录等)。 | 交互式,会像安装向导一样,一步步提示你输入用户名、密码、全名等信息,并自动处理家目录创建等细节。 |
| 使用场景 | 脚本自动化、批量创建用户。 | 手动创建单个用户,更友好、更安全。 |
| 推荐 | 在服务器、脚本、自动化任务中使用。 | 在桌面环境或手动管理少量用户时使用。 |
简单总结:useradd 是功能强大的“瑞士军刀”,适合自动化;adduser 是贴心的“新手向导”,适合手动操作。
创建用户后的必要操作
创建用户后,通常还需要执行以下步骤:
-
设置密码:新创建的用户没有密码,无法登录。
# 为用户 testuser 设置密码 sudo passwd testuser # 系统会提示你输入并确认新密码
-
验证用户:
# 切换到新用户 su - testuser # 查看用户信息 id testuser # 输出示例:uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),27(sudo)
useradd 是 Linux 系统管理员必须精通的命令,理解其核心选项(特别是 -m, -s, -g, -G)以及它与 adduser 的区别,对于高效、安全地管理系统用户至关重要。
