useradd 命令用于在 Linux 系统中创建新的用户账户,它是一个底层的、功能强大的命令,通常由系统管理员使用。

基本语法
useradd [选项] 用户名
[选项]:用于指定创建用户时的各种参数,如家目录、用户组、Shell 等。用户名:你想要创建的新用户的名称。
最简单的用法
在不带任何选项的情况下使用 useradd,它会创建一个用户,但这个用户可能无法正常登录,并且配置非常基础。
sudo useradd testuser
执行这个命令后,系统会:
- 在
/etc/passwd文件中添加一行新用户信息。 - 在
/etc/shadow文件中添加一行新用户的密码信息(初始密码为空,所以无法登录)。 - 在
/etc/group和/etc/gshadow文件中创建一个与用户名同名的用户组。 - 在
/home目录下创建一个名为testuser的家目录(/etc/default/useradd文件中的HOME变量设置为/home)。 - 从
/etc/skel/目录复制所有文件到新用户的家目录中(.bashrc,.profile等)。
注意:直接这样创建的用户,因为没有设置密码,也无法进行交互式登录。
常用选项和示例
useradd 的强大之处在于其丰富的选项,下面是一些最常用和重要的选项。

a. 创建用户并设置初始密码
创建用户后,你需要使用 passwd 命令来为其设置密码。
# 1. 创建用户 sudo useradd -m alice # 2. 为用户设置密码 sudo passwd alice # New password: (输入新密码) # Retype new password: (再次输入新密码)
-m 选项:这是一个非常重要的选项,它告诉 useradd 在 /home 目录下为新用户创建家目录。在现代 Linux 发行版中,-m 通常是默认行为,但明确指定它是一个好习惯。
b. 指定家目录路径
如果不想使用默认的 /home/用户名 作为家目录,可以使用 -d 选项。
# 创建一个用户,并将其家目录指定到 /data/users/bob sudo useradd -m -d /data/users/bob bob
c. 指定用户登录 Shell
默认情况下,新用户的 Shell 通常是 /bin/sh,如果希望用户使用更友好的 Bash Shell,可以使用 -s 选项。

# 创建用户 charlie,并指定其登录 Shell 为 /bin/bash sudo useradd -m -s /bin/bash charlie
你可以通过查看 /etc/passwd 文件来验证:
grep charlie /etc/passwd # 输出类似于:charlie:x:1001:1001::/home/charlie:/bin/bash
最后一部分就是用户默认的 Shell。
d. 指定用户的主组
每个用户都必须属于一个主组,默认情况下,useradd 会创建一个与用户名相同的同名组,如果你想指定一个已存在的组作为用户的主组,可以使用 -g 选项。
# 假设已经存在一个名为 developers 的组 # 创建用户 dave,并将其主组设置为 developers sudo useradd -m -G developers -s /bin/bash dave
注意:-g (小写) 是用于设置主组。
e. 将用户添加到附加组
一个用户可以同时属于多个组,除了主组外,还可以将其加入其他附加组,这通常用于分配权限,使用 -G (大写) 选项。
# 创建用户 eve,并将其加入 sudo 和 docker 这两个附加组 sudo useradd -m -G sudo,docker -s /bin/bash eve
这样,eve 用户就获得了 sudo 组的权限(可以执行 sudo 命令)和 docker 组的权限。
f. 创建系统用户
系统用户通常用于运行服务或守护进程,它们没有家目录,也无法登录,使用 -r 选项可以创建系统用户。
# 创建一个名为 nginx 的系统用户 sudo useradd -r -s /sbin/nologin nginx
-r:创建一个系统账户,UID 会小于某个值(通常是 1000),并且不会创建家目录。-s /sbin/nologin:指定一个禁止登录的 Shell,这是一个安全措施。
g. 指定用户 ID 和组 ID
默认情况下,系统会自动分配一个唯一的 UID(用户ID)和 GID(组ID),你也可以手动指定。
# 创建用户 frank,并指定其 UID 为 2000,GID 为 2000 sudo useradd -m -u 2000 -g 2000 frank
h. 创建用户时指定用户信息 (GECOS)
/etc/passwd 文件的第五个字段是 GECOS 字段,通常用于存储用户的完整姓名、电话等信息,使用 -c 选项可以设置它。
# 创建用户 grace,并设置其注释信息为 "Grace Hopper, Developer" sudo useradd -m -c "Grace Hopper, Developer" grace
你可以用 finger grace 或 chfn -l "Grace Hopper, Developer" grace 来查看或修改这些信息。
useradd vs. adduser
在 Linux 世界里,你可能会遇到 adduser 这个命令,它和 useradd 有什么区别?
| 特性 | useradd (通常在 /usr/sbin/) |
adduser (通常在 /usr/sbin/) |
|---|---|---|
| 类型 | 一个纯粹的命令行工具 | 一个一个的脚本 |
| 交互性 | 非交互式,所有选项必须在命令行中指定。 | 交互式,如果你不带任何选项运行它,它会像安装向导一样,一步步询问你用户名、密码、全名等信息。 |
| 易用性 | 功能强大但参数复杂,不适合新手。 | 对新手非常友好,操作简单直观。 |
| 默认行为 | 行为由 /etc/default/useradd 文件配置。 |
通常会创建一个更完整的用户环境,比如设置默认 Shell 为 /bin/bash。 |
- 对于自动化脚本和系统管理,
useradd是首选,因为它可预测、可编程。 - 对于手动创建少量用户,特别是新手,
adduser更方便。
重要配置文件
useradd 的很多默认行为都由以下文件控制:
/etc/passwd:存储所有用户账户信息。/etc/shadow:存储所有用户的加密密码和密码过期信息。/etc/group:存储所有用户组信息。/etc/gshadow:存储所有用户组的加密密码和管理员信息。/etc/default/useradd:useradd命令的默认配置文件,你可以在这里修改默认的家目录路径、是否创建家目录、默认 Shell 等。/etc/skel/:骨架目录,当使用-m选项创建用户家目录时,该目录下的所有文件都会被复制到新用户的家目录中,你可以在这个目录里放置默认的配置文件(如.bashrc,.vimrc等),它们会自动成为所有新用户的配置。
相关命令
usermod:修改已存在的用户账户信息(如修改家目录、Shell、附加组等)。userdel:删除用户账户。passwd:修改用户密码。chage:修改用户密码过期策略。id:显示用户的 UID、GID 和所属组信息。groups:显示用户所属的所有组。
useradd 是 Linux 系统管理的基石之一,虽然它的选项繁多,但掌握了核心选项(如 -m, -s, -g, -G),你就能灵活地创建出符合各种需求的用户账户,对于系统自动化任务,useradd 是不可或缺的工具。
