如何使用useradd命令在Linux中创建用户

Linux是一个多用户系统,这意味着不止一个人可以同时在同一系统进行交互。作为系统管理员,您有责任通过创建和删除用户来管理系统的用户和组,并将其分配给不同的组。在Linux中,您可以使用useradd命令创建用户帐户并将用户分配到不同的组。useradd是一个非常实用的命令,Debian和Ubuntu用户可以使用更友好的adduser命令。本教程介绍了useradd命令及其选项。

10 min read
By myfreax
如何使用useradd命令在Linux中创建用户

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

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

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

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

为了能够使用useradd命令创建新用户,您需要以root用户或具有sudo访问权限的用户身份登录。

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

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

useradd命令

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

其中USERNAME是你要创建用户的用户名,OPTIONS是useradd命令的选项。

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

此文件中定义的变量会根据不同的Linux发行版可能会有差异。如果在没有任何选项的情况下使用useradd命令,则可能会在不同的Linux发行版上生成不同的结果。

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

Linux创建用户

在没有任何选项的情况下使用useradd最简单的形式,useradd将使用/etc/default/useradd文件中指定的默认设置创建一个新的用户帐户。

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

在Linux中,默认是不允许未设置密码的用户登录。如想要能够以新创建的用户登录,您需要设置用户密码。passwd命令允许你为用户设置和修改密码。

使用useradd创建名为username的新用户帐户,您将运行的命令:

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/--create-home选项创建用户家目录/home/username

在创建用户的家目录时,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创建用户

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

UID以及其他访问控制策略用于确定用户可以对系统资源执行的操作类型。如果你需要指定用户UID在创建用户时,可以使用-u/--uid选项创建具有特定UID的用户。

默认情况下,在创建新用户时,系统会从login.defs文件中的用户ID范围指定分配下一个可用的UID 。除非有特别的需求,不建议手动指定用户的UID。

例如以下命令将使用useradd要创建一个名为myfreax用户,UID为1500的新用户,当创建用户后,您可以使用id命令验证用户的UID :

sudo useradd -u 1500 username
id -u username

指定组ID创建用户

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

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

使用useradd的-g/--gid选项可以指定用户的所属组。您可以指定组名称或GID。指定的组名称或GID必须已经存在。-g选项的组将会成为用户的主要组。

例如以下命令将使用useradd创建一个名为myfreax的用户,UID为1500的新用户,当创建用户后,您可以使用id命令验证用户的GID :

sudo useradd -g users myfreax
id -gn myfreax

创建用户并分配多个组

Linux操作系统中有两种类型的组主要组和辅助组或补充组。每个用户可以属于一个主要组和零个或多个次要组。

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

以下useradd命令将创建一个名为myfreax的用户,并指定主要组是users和辅助组是wheeldocker。您可以使用id命令查看用户的所属组:

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

指定登录Shell创建用户

默认情况下,新用户的登录shell在/etc/default/useradd文件中指定的登录shell 。在某些Linux发行版(如Ubuntu 18.04)中,默认shell设置为/bin/sh而在其他版本中则设置为/bin/bash

-s--shell)选项允许你指定新用户的登录shell。例如,要创建一个名为username, 登录shell是/usr/bin/zsh 的新用户:

useradd -s /usr/bin/zsh username

检查/etc/passwd文件中的用户条目以验证用户的登录shell:

grep myfreax /etc/passwd
username:x :1001:1001::/home/myfreax:/usr/bin/zsh

创建用户联系信息/注释

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

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

在以下useradd示例中,我们将创建一个myfreax的新用户并使用Test User Account作为注释,然后使用grep命令查看在/etc/passwd文件中的用户注释:

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

指定到期日期创建用户

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

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

例如,以下useradd将创建一个名为myfreax的用户,用户的到期时间设置为2022年1月22日。然后使用chage命令查看用户的到期时间:

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范围中选择的,该范围不同于普通用户使用的范围。

例如以下useradd命令将创建一个名为mfreax的系统用户:

sudo useradd -r username

更改默认的创建用户所使用的配置

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

也可以通过使用cat /etc/default/useradd命令文件内容确定useradd命令的默认选项。或手动编辑/etc/default/useradd文件中的值来更改默认的useradd选项。

假设您要将默认登录shell从/bin/sh更改为/bin/bash。可以使用useradd的-s选项为用户指定新的登陆shell,

例如以下useradd命令将使用-D选项修改,-s选项指定登录时使用的shell为bash。

useradd -D -s /bin/bash #修改用户登录shell
sudo useradd -D | grep -i shell #验证是否已经修改用户的登录shell
SHELL=/bin/bash

结论

在本教程中,您学习了如何使用useradd命令添加新用户帐户。useradd命令适用于任何Linux发行版,包括Ubuntu,CentOS,RHEL,Debian,Fedora和Arch Linux。如果您有任何疑问,请随时发表评论。