Linux是一个多用户系统,这意味着不止一个人可以同时在同一系统进行交互。作为系统管理员,您有责任创建和删除用户来管理系统的用户和组,并将其分配给不同的组。

在 Linux,您可以使用 useradd 命令创建用户帐户并将用户分配到不同的组。useradd是所有 Linux 发行版都可以使用的命令。

但 Debian 和 Ubuntu 用户可以使用更友好的 adduser 命令。本教程介绍 useradd 命令及其选项。

useradd 命令适用于任何Linux发行版,包括Ubuntu,CentOS,RHEL,Debian,Fedora和Arch Linux。

创建 sudo 用户

为了能够使用 useradd 命令创建用户,您需要以 root 或具有 sudo 权限的用户登录到 Linux 系统。

如果你的计算机运行的是基于 RedHat 的 Linux 发行版,例如如 CentOS , Fedora ,可以参考我们教程如何在 CentOS 创建 sudo 用户

如果你的计算机运行的是基于 Debian 的 Linux 发行版,例如 Linux Minit,Ubuntu,elementary,可参考我们的教程如何在 Debian 创建 sudo 用户

useradd 命令

在讨论如何使用 useradd 命令之前,让我们先回顾一下基本语法。useradd 命令语法形式是 。

useradd [OPTIONS] USERNAME

其中 USERNAME 是要创建用户的用户名,OPTIONS 是 useradd 命令的选项,是一个可选的参数。

在运行 useradd 命令创建用户时,useradd 命令将会使用命令行中指定的选项以及 /etc/default/useradd 文件指定的默认值创建用户帐户。

不同的 Linux 发行版 /etc/default/useradd 文件定义的变量会有差异。如果在没有任何选项运行 useradd 命令时,可能会在不同的 Linux 发行版得到不同的结果。

useradd 命令还读取文件 /etc/login.defs 的内容。此文件包含影子密码的配置,例如密码过期策略,创建系统用户和普通用户时使用的用户ID范围等。

Linux 创建用户

使用 useradd 命令最简单的形式是不指定任何选项,useradd 命令将会读取 /etc/default/useradd 文件指定的默认值创建用户帐户。

useradd 命令会在 /etc/passwd/etc/shadow, /etc/group/etc/gshadow文件加入要创建用户的配置信息。

useradd 命令默认不设置用户登录密码。如想要 useradd 命令创建的用户可以使用密码登录,则需要使用 passwd 命令设置用户密码。

在运行 passwd 命令设置用户密码时,系统将提示您输入并确认密码。确保使用强密码。在输入密码时密码是不可见的,完成输入后,只需要回车即可。

sudo useradd myfreax
sudo passwd myfreax
Changing password for user myfreax.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

创建用户家目录

在大多数 Linux 发行版,在使用 useradd 命令创建新用户帐户时,不会创建用户家目录。但可以指定 useradd 命令的 -m 选项创建用户家目录。

在创建用户的家目录时,useradd 命令将会从 /etc/skel 目录复制文件到用户的家目录。并作为用户基本配置信息。

除了在 /home/ 目录创建用户家目录外,也可以指定在目录创建用户家目录,/home目录是默认的创建用户家目录的路径。

要指定其它目录创建用户家目录可以使用 useradd 命令的 d/--home 选项改变这个默认值。

当你完成用户的创建时,可使用 ls 命令列出用户家目录的文件,你将会看到初始化用户时的配置文件。

在本教程仅包含 bash 的配置文件。具体会根据发行版,以及你安装的软件存在差异。最后,如果需要让用户可登录,记得运行 passwd 命令为你的创建的用户设置密码。

#useradd -m -d /opt/username myfreax #-d指定用户家目录
sudo useradd -m myfreax
ls -la /home/myfreax/
drwxr-xr-x 2 username username 4096 Dec 11 11:23 .
drwxr-xr-x 4 root     root     4096 Dec 11 11:23 ..
-rw-r--r-- 1 username username  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 username username 3771 Apr  4  2018 .bashrc
-rw-r--r-- 1 username username  807 Apr  4  2018 .profile

指定用户 ID

在 Linux/Unix 操作系统,用户由唯一的UID和用户名组成。用户标识符UID是 Linux 系统为每个用户分配的唯一正整数。

UID 用于访问控制策略确定用户是否可以对系统资源执行操作。如果你需要在创建用户时指定用户 UID,可以使用 useradd 命令的-u/--uid选项指定。

默认情况下,在创建用户时 useradd 命令会从 login.defs 文件读取用户 ID 范围并指定下一个可用的 UID 。除非有特别的需求,不建议手动指定用户的 UID。

sudo useradd -u 1500 username 命令将会创建用户 myfreax,指定UID为 1500,当创建用户后,可以运行 id 命令验证用户的UID 。

sudo useradd -u 1500 username
id -u username

指定组 ID

Linux 组是组织单位,用于在 Linux 中组织和管理用户帐户。组的主要目的是定义一组权限,例如读取,写入或执行可以在组内用户之间共享的指定资源的权限。

在创建用户时,useradd 命令的默认行为是创建一个与用户名相同的组,以及与 UID相同的 GID。

要指定用户要加入的组 ID,可以使用 useradd 的 -g/--gid 选项可以指定用户的所属组。

也可以指定组名称或 GID。指定的组名称或 GID 必须已经存在。-g 选项的组将会成为用户的主要组。

sudo useradd -g admin myfreax 命令创建用户 myfreax,并指定加入的组是admin,完成用户创建后可以运行 id 命令验证用户的 GID或者组的名称。

sudo useradd -g admin myfreax
id myfreax

创建用户加入多个组

Linux 操作系统有两种类型的组,分别是主要组和次要组。每个用户可以属于一个主要组和零个或多个次要组。

useradd 命令的 -G/--groups 选项允许你指定用户次要组,可以同时为创建的用户指定多个次要组,用户将成为这些次要组的成员。

sudo useradd -g users -G wheel,developers myfreax 命令创建用户 myfreax 并指定主要组是 users 和次要组是 wheel 和 docker。

sudo useradd -g users -G wheel,docker myfreax
id myfreax
uid=1002(username) gid=100(users) groups=100(users),10(wheel),993(docker)

创建用户并指定登录 Shell

默认情况下,创建的用户的登录 shell 在 /etc/default/useradd 文件指定。可以使用 useradd 命令的 -s/--shell 选项指定用户的登录 Shell。

在某些 Linux 发行版(如Ubuntu 18.04),默认的登录 Shell 设置为 /bin/sh 而在其他的版本则设置为 /bin/bash。

要查看用户的默认的登录 Shell,可以运行 grep 命令grep myfreax /etc/passwd搜索 /etc/passwd 文件,myfreax 是用户名。

useradd -s /usr/bin/zsh myfreax 命令创建用户 myfreax 并登录 Shell是 /usr/bin/zsh。

useradd -s /usr/bin/zsh myfreax
grep myfreax /etc/passwd
myfreax:x :1001:1001::/home/myfreax:/usr/bin/zsh

创建用户并设置联系信息/注释

useradd 命令的 -c/--comment 选项允许你在创建用户的同时添加一个简短的说明。通常时用户的全名或联系信息作为注释。

注释字段也称为 GECOS,它保存在 /etc/passwd 文件。可以往注释中添加任何内容。当创建用户后你可使用 grep 命令查看用户在 /etc/passwd 文件注释内容。

sudo useradd -c "Test User Account" myfreax 命令创建用户 myfreax 并使用 Test User Account 作为注释。

sudo useradd -c "Test User Account" myfreax
sudo grep myfreax /etc/passwd
myfreax:x :1001:1001:Test User Account:/home/username:/bin/sh

指定到期日期创建用户

useradd 命令的 -e/--expiredate 选项允许你指定用户到期时间。此选项对于创建临时帐户很有用。

用户到期/过期时间格式,必须使用 YYYY-MM-DD 格式指定日期。可以使用 chage 命令查看用户的到期日期。

sudo useradd -e 2022-1-22 myfreax 命令创建用户 myfreax 并设置用户的到期时间为 2022 年 1 月 22 日。

sudo useradd -e 2022-1-22 myfreax
sudo chage -l myfreax
Last password change					: Dec 11, 2018
Password expires					: never
Password inactive					: never
Account expires						: Jan 22, 2019
Minimum number of days between password change		: 0
Maximum number of days between password change		: 99999
Number of days of warning before password expires	: 7

创建系统用户

系统与普通用户之间没有真正的差异。通常,在安装操作系统和软件时会创建系统用户。

在某些情况下,您可能需要为自定义的应用程序创建系统用户。useradd 命令的-r/--system 选项允许你创建系统用户。

系统用户创建时没有到期日期。它们的 UID 不是从 login.defs 文件读取。而是在系统用户 ID 范围选择,该范围不同于普通用户使用的范围。

sudo useradd -r username

修改的默认值

useradd 命令的默认选项,可以使用 useradd 命令的 -D/--defaults 选项查看或者编辑。查看 useradd 命令的默认选项很简单,运行命令useradd -D即可查看默认选项。

也可以运行 cat 命令查看 /etc/default/useradd 文件内容确定 useradd 命令的默认选项。或手动编辑 /etc/default/useradd 文件的值来修改默认的 useradd 命令选项。

假设要将用户的默认登录 Shell 从 /bin/sh 修改为 /bin/bash。可以使用 useradd 命令的 -s 选项为用户指定用户的默认登录 Shell,

useradd -D -s /bin/bash
sudo useradd -D | grep -i shell
SHELL=/bin/bash

结论

至此,你已经了解如何在 Linux 系统使用 useradd 命令创建用户帐户以及命令的常用选项。

useradd 命令适用于任何Linux发行版,包括Ubuntu,CentOS,RHEL,Debian,Fedora和Arch Linux。如果您有任何疑问,请随时发表评论。