菜鸟科技网

linux 命令 useradd

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

linux 命令 useradd-图1
(图片来源网络,侵删)

基本语法

useradd [选项] 用户名
  • [选项]:用于指定创建用户时的各种参数,如家目录、用户组、Shell 等。
  • 用户名:你想要创建的新用户的名称。

最简单的用法

在不带任何选项的情况下使用 useradd,它会创建一个用户,但这个用户可能无法正常登录,并且配置非常基础。

sudo useradd testuser

执行这个命令后,系统会:

  1. /etc/passwd 文件中添加一行新用户信息。
  2. /etc/shadow 文件中添加一行新用户的密码信息(初始密码为空,所以无法登录)。
  3. /etc/group/etc/gshadow 文件中创建一个与用户名同名的用户组。
  4. /home 目录下创建一个名为 testuser 的家目录(/etc/default/useradd 文件中的 HOME 变量设置为 /home)。
  5. /etc/skel/ 目录复制所有文件到新用户的家目录中(.bashrc, .profile 等)。

注意:直接这样创建的用户,因为没有设置密码,也无法进行交互式登录。


常用选项和示例

useradd 的强大之处在于其丰富的选项,下面是一些最常用和重要的选项。

linux 命令 useradd-图2
(图片来源网络,侵删)

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 选项。

linux 命令 useradd-图3
(图片来源网络,侵删)
# 创建用户 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 gracechfn -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/useradduseradd 命令的默认配置文件,你可以在这里修改默认的家目录路径、是否创建家目录、默认 Shell 等。
  • /etc/skel/骨架目录,当使用 -m 选项创建用户家目录时,该目录下的所有文件都会被复制到新用户的家目录中,你可以在这个目录里放置默认的配置文件(如 .bashrc, .vimrc 等),它们会自动成为所有新用户的配置。

相关命令

  • usermod:修改已存在的用户账户信息(如修改家目录、Shell、附加组等)。
  • userdel:删除用户账户。
  • passwd:修改用户密码。
  • chage:修改用户密码过期策略。
  • id:显示用户的 UID、GID 和所属组信息。
  • groups:显示用户所属的所有组。

useradd 是 Linux 系统管理的基石之一,虽然它的选项繁多,但掌握了核心选项(如 -m, -s, -g, -G),你就能灵活地创建出符合各种需求的用户账户,对于系统自动化任务,useradd 是不可或缺的工具。

分享:
扫描分享到社交APP
上一篇
下一篇