如何在Linux上创建、修改和删除用户帐户
用户帐户管理是每个 Linux 系统管理员的基本任务之一。在本文中,我们将学习如何创建新的用户帐户、如何修改它以及如何使用 useradd
、usermod
和 从命令行删除它userdel 实用程序,它们是基本系统的一部分。
在本教程中您将学习:
/etc/login.defs 文件有什么用
如何使用 useradd 命令创建具有各种选项的用户帐户
如何使用 usermod 命令修改用户帐户
如何使用 userdel 命令删除用户帐户
如何在Linux上创建、修改和删除用户帐户
使用的软件要求和约定
默认设置
创建用户时应用的默认设置在 /etc/login.defs
文件中定义。例如,如果我们查看 Fedora 系统上的文件,我们可以看到其中定义的选项,这些选项可以在运行时被专用命令行选项覆盖。让我们看看其中一些定义:
OPTION | MEANING | DEFAULT VALUE |
---|---|---|
CREATE_HOME | Defines if an home directory should be created for new users | yes |
ENCRYPT_METHOD | The encrypt method used for encrypting passwords | SHA512 |
UID_MIN | Minimum uid value automatically assigned to standard users | 1000 |
UID_MAX | Maximum uid value automatically assigned to standard users | 60000 |
SYS_UID_MIN | Minimum uid value automatically assigned to “system” users | 201 |
SYS_UID_MAX | Maximum uid value automatically assigned to “system” users | 999 |
PASS_MAX_DAYS | Maximum number of days a password may be used | 99999 |
PASS_MIN_DAYS | Minimum number of days allowed between password changes | 0 |
PASS_WARN_AGE | Number of days warning is given before a password expires | 7 |
上面的只是 /etc/login.defs
文件中定义的选项的一小部分,但足以给出一个总体思路。
创建新用户
要在 Linux 系统上创建新的用户帐户,我们可以使用 useradd
实用程序;其语法如下:
useradd [options] LOGIN
其中 LOGIN 是要创建的登录名。假设我们要为“newuser”用户创建一个新帐户;我们会运行:
$ sudo useradd newuser
上面的命令将在系统上创建“newuser”帐户;此外,还将为用户创建一个主目录,因为如上表所示,CREATE_HOME
选项默认设置为 yes。可以使用 -m
(--create-home
的缩写)选项显式请求为新用户创建主目录>useradd 命令。如果我们想避免创建该目录,我们应该使用 -M
选项,它是 --no-create-home
的缩写。
创建用户后,建议设置其密码的方法是使用 passwd
实用程序,记住这一点,是重要的一步!
指定登录 shell
创建新用户时我们可能想要指定的另一个常见的事情是其登录 shell:我们可以使用 -s
选项(--shell
)并将 shell 二进制文件的路径作为参数传递。如果未显式提供此选项,则将使用 $SHELL
变量指定的 shell(在 Fedora 上为 /bin/bash
)。例如,要显式声明新用户的登录 shell,我们将运行:
$ sudo useradd -s /bin/bash newuser
手动指定用户UID
创建新用户时,默认情况下,第一个可用的 uid 大于或等于 /etc/login.defs< 中的
文件,大于任何其他用户的文件,并且小于或等于使用 UID_MIN
选项指定的UID_MAX
选项指定的文件,将分配给他。如果我们想手动指定一个 uid,我们应该使用 -u
(--uid
) 选项并提供我们想要用作其参数的 uid 值(它必须为非负值)。要创建手动分配 uid 为 1005
的用户,我们将运行:
$ sudo useradd -u 1005 newuser
创建“系统”用户
如果没有明确声明,useradd
命令将创建“标准”用户,即 uid >= 1000 的用户。如果我们想创建一个“系统”用户,则创建一个没有老化的用户在 /etc/shadow
文件中声明的信息,我们必须使用 -r
(--system
) 选项。系统用户通常由守护程序或其他应用程序使用,因此不会为他们创建主目录。它们的 uid 在 /etc/login.defs
文件中的 SYS_UID_MIN
和 SYS_UID_MAX
选项定义的范围内选择。要创建“系统”用户,我们将运行:
$ sudo useradd -r newuser
为新用户指定其他组
创建标准用户时,默认情况下,将创建一个以其命名的组,并且该组将自动包含在其中:这是其主要组。如果我们想要指定用户应该属于的一系列附加组,我们必须使用 -G
选项,它是 --groups
的缩写,并提供以逗号分隔的组列表作为其参数。例如,要将用户包含在 wheel 组中(这是让它使用 sudo 命令所必需的),我们将运行:
$ sudo useradd -G wheel newuser
使用 usermod 实用程序修改用户帐户
如果 useradd
实用程序用于创建新用户帐户,则 usermod
实用程序(顾名思义)用于修改现有帐户。该命令使用的语法与 useradd
使用的语法相同:
usermod [options] LOGIN
让我们看一些实用程序用法的示例。
将现有用户添加到其他组
我们了解了如何使用 useradd
命令的 -G
选项在创建时将用户添加到一些附加组。但是,如果用户帐户已存在,并且我们希望使其成为补充组的成员,则应将相同的选项与 -a
(--append
) 一起使用运行 usermod
实用程序并提供组列表作为其参数时的一个:
$ sudo usermod -G -a newgroup user
-a
选项必须与-G
单独使用。但请注意,如果后者单独使用,则指定的组将不会添加到用户已属于的补充组列表中,但该列表会 被完全重新定义。
锁定和解锁用户密码
有时我们可能想锁定用户密码,使其无法使用该密码登录。在这种情况下,我们可以使用 -L
选项(--lock
的缩写):
$ sudo usermod -L newuser
!
符号将被放在加密密码前面,将其禁用:
newuser:!$6$ISaqNDTydf51adbj$6ciHWBByfhe9k0sfg8Cky2F3HhgxdfMtmrWyq0323rvuCUu/un0d4rldwI0ELj4aSyFv0.cki3c/oLJFFNGyt/:18602:0:99999:7:::
要执行相反的操作并解锁用户密码,我们应该使用 -U
(--unlock
) 选项:
$ sudo usermod -U newuser
更改用户 uid 及其初始组的 gid
要更改现有用户 uid,我们应该使用 usermod
的 -u
选项并提供要使用的新值。当然,指定的 uid 不能已被使用,否则我们将收到错误:
$ sudo usermod -u 1000 newuser
usermod: UID '1000' already exists
当现有用户的 uid 更改时,该用户主目录中包含的所有文件的用户 ID 都会相应更改,除非主目录的 uid 与当前分配给用户的 uid 不同。
我们可能还想更改用户初始组的gid(组id)(与用户一起创建的组:其gid与用户相同) uid)。要执行此类操作,我们必须运行带有 -g
或 --gid
选项的 usermod
;新组必须已经存在:
$ sudo usermod -g 1006 newuser
一旦我们更改用户主要组,其主目录中由其前一个组拥有的文件将自动设置为由新组拥有。
更改用户登录名
要更改用户登录名,我们必须使用 usermod
实用程序的 -l
(--login
) 选项,提供新的登录名作为第一个参数,当前登录名作为第二个参数。假设我们要更改登录名 “newuser”到“linuxconfig”,我们将运行:
$ sudo usermod -l linuxconfig newuser
请注意,运行上述命令只会更改用户登录名,不会更改任何其他内容。用户的主目录不会被重命名。如果您还想进行这些其他更改,请查看下一部分。
更改用户主目录并移动所有用户文件
有时我们可能需要更改用户的主目录。要完成该任务,我们必须使用 -d
选项(--home
的缩写)运行 usermod
实用程序,并指定新目录的路径。如果我们还想移动当前主目录中存在的所有文件,我们还应该提供 -m
选项,它是 --move-home
的缩写。仅当当前主目录实际存在时才会创建新的主目录;文件所有权、模式、ACL 和扩展属性将适应新设置,但可能需要进行额外的手动更改。要将 newuser
用户的目录(实际上是 /home/newuser
)更改为 /home/newuser_new
,并移动所有文件, 因此我们会运行:
$ sudo usermod -d /home/newuser_new -m newuser
使用 userdel 实用程序删除用户
我们看到了一些如何创建和修改用户帐户的示例,现在让我们看看如何使用 userdel
实用程序删除一个及所有相关文件。 userdel
实用程序的语法与我们之前看到的 useradd
和 usermod
相同:
userdel [options] LOGIN
由于显而易见的原因,该实用程序的选项比 useradd
和 usermod
少。最常见的使用案例是删除用户帐户及其主目录和假脱机目录中包含的所有文件以及这些目录本身。为了完成这样的任务,我们将使用 -r
(--remove
) 选项运行 userdel
。假设我们要删除“newuser”帐户、其主目录和假脱机目录,我们将运行:
$ sudo userdel -r newuser
如果用户当前已登录,我们将收到错误,系统将拒绝删除它。如果我们想强制执行该操作,我们还必须使用 -f
(--force
) 选项。被警告!使用此选项是危险的,因为它可能会使系统处于不一致的状态。
结论
在本教程中,我们了解了如何使用 useradd
、usermod
和 userdel
系统实用程序分别创建、修改和删除用户帐户。我们看到了一些示例和用例。有关可与这些实用程序一起使用的所有选项的完整概述,请查阅其手册。