Linux useradd 命令简介

使用 useradd 命令添加用户(并根据需要自定义其帐户)。
141 位读者喜欢这篇文章。
people in different locations who are part of the same team

Opensource.com

添加用户是任何计算机系统上最基本的操作之一;本文重点介绍如何在 Linux 系统上执行此操作。

在开始之前,我想提及三个需要牢记的基本要点。首先,与大多数操作系统一样,Linux 用户需要一个帐户才能登录。本文专门介绍本地帐户,而不是 LDAP 等网络帐户。其次,帐户既有名称(称为用户名)又有编号(称为用户 ID)。第三,用户通常被放入一个组。组也有名称和组 ID。

正如您所期望的,Linux 包含一个用于添加用户的命令行实用程序;它被称为 useradd。您可能还会找到命令 adduser。许多发行版为了方便起见,添加了这个指向 useradd 命令的符号链接。

$ file `which adduser`
/usr/sbin/adduser: symbolic link to useradd

让我们来看看 useradd

注意:本文中描述的默认值反映了 Red Hat Enterprise Linux 8.0 中的默认值。您可能会在其他 Linux 发行版或其他 Unix 操作系统(如 FreeBSD 或 Solaris)上的这些文件和某些默认值中发现细微差别。

默认行为

useradd 的基本用法非常简单:只需提供用户名即可添加用户。

$ sudo useradd sonny

在此示例中,useradd 命令创建一个名为 sonny 的帐户。还会创建一个同名组,并将 sonny 放入其中用作主组。还有其他参数,例如语言和 shell,它们根据配置文件 /etc/default/useradd/etc/login.defs 中设置的默认值和值应用。这通常足以满足单个个人系统或小型单服务器业务环境的需求。

虽然以上两个文件控制着 useradd 的行为,但用户信息存储在 /etc 目录中的其他文件中,我将在本文中提及这些文件。

文件 描述 字段(粗体—由 useradd 设置)
passwd 存储用户帐户详细信息 username:unused:uid:gid:comment:homedir:shell
shadow 存储用户帐户安全详细信息 username:password:lastchange:minimum:maximum:warn:inactive:expire:unused
group 存储组详细信息 groupname:unused:gid:members

可自定义的行为

命令行允许在管理员需要更精细的控制时进行自定义,例如指定用户的 ID 号。

用户和组 ID 号

默认情况下,useradd 尝试对用户 ID (UID) 和主组 ID (GID) 使用相同的数字,但不能保证一定相同。虽然 UID 和 GID 不必匹配,但当它们匹配时,管理员更容易管理它们。

我正好有一个场景可以解释。假设我添加另一个帐户,这次是为 Timmy 添加的。比较两个用户 sonnytimmy,表明这两个用户及其各自的主组都是使用 getent 命令创建的。

$ getent passwd sonny timmy
sonny:x:1001:1002:Sonny:/home/sonny:/bin/bash
timmy:x:1002:1003::/home/timmy:/bin/bash

$ getent group sonny timmy
sonny:x:1002:
timmy:x:1003:

遗憾的是,这两个用户的 UID 和主 GID 都不匹配。这是因为默认行为是将下一个可用的 UID 分配给用户,然后尝试将相同的数字分配给主组。但是,如果该数字已被使用,则将下一个可用的 GID 分配给该组。为了解释发生了什么,我假设已存在一个 GID 为 1001 的组,并输入命令进行确认。

$ getent group 1001
book:x:1001:alan

ID 为 1001 的组 book 导致 GID 偏移了一。这是一个系统管理员需要更多地控制用户创建过程的示例。要解决此问题,我必须首先确定下一个可用的用户和组 ID,使其匹配。命令 getent groupgetent passwd 将有助于确定下一个可用号码。此号码可以通过 -u 参数传递。

$ sudo useradd -u 1004 bobby

$ getent passwd bobby; getent group bobby
bobby:x:1004:1004::/home/bobby:/bin/bash
bobby:x:1004:

指定 ID 的另一个充分理由是,对于将使用网络文件系统 (NFS) 访问远程系统上的文件的用户。当所有客户端和服务器系统都为给定用户配置了相同的 ID 时,NFS 更易于管理。我在关于使用 autofs 挂载 NFS 共享的文章中更详细地介绍了这一点。

更多自定义

不过,通常情况下,还需要为用户指定其他帐户参数。以下是您可能需要使用的最常见自定义的简短示例。

注释

注释选项是一个纯文本字段,用于使用 -c 参数提供简短描述或其他信息。

$ sudo useradd -c "Bailey is cool" bailey
$ getent passwd bailey
bailey:x:1011:1011:Bailey is cool:/home/bailey:/bin/bash

可以为用户分配一个主组和多个辅助组。 -g 参数指定主组的名称或 GID。如果未指定,useradd 将创建一个与用户同名的主组(如上所示)。 -G(大写)参数用于传递用户将被放入的组的逗号分隔列表;这些被称为辅助组。

$ sudo useradd -G tgroup,fgroup,libvirt milly 
$ id milly
uid=1012(milly) gid=1012(milly) groups=1012(milly),981(libvirt),4000(fgroup),3000(tgroup)

主目录

useradd 的默认行为是在 /home 中创建用户的主目录。但是,可以使用以下参数覆盖主目录的不同方面。 -b 设置另一个可以放置用户主目录的目录。例如,/home2 而不是默认的 /home

$ sudo useradd -b /home2 vicky
$ getent passwd vicky
vicky:x:1013:1013::/home2/vicky:/bin/bash

-d 允许您指定一个与用户名称不同的主目录。

$ sudo useradd -d /home/ben jerry
$ getent passwd jerry
jerry:x:1014:1014::/home/ben:/bin/bash

骨架目录

-k 指示新用户的新主目录填充 /etc/skel 目录中的任何文件。这些通常是 shell 配置文件,但它们可以是系统管理员希望向所有新用户提供的任何内容。

Shell

-s 参数可用于指定 shell。如果未指定其他内容,则使用默认值。例如,在以下示例中,shell bash 在默认配置文件中定义,但 Wally 请求了 zsh

$ grep SHELL /etc/default/useradd 
SHELL=/bin/bash

$ sudo useradd -s /usr/bin/zsh wally
$ getent passwd wally
wally:x:1004:1004::/home/wally:/usr/bin/zsh

安全性

安全性是用户管理的重要组成部分,因此 useradd 命令提供了多个选项。可以使用 -e 参数以 YYYY-MM-DD 格式为用户帐户设置到期日期。

$ sudo useradd -e 20191231 sammy
$ sudo getent shadow sammy
sammy:!!:18171:0:99999:7::20191231:

如果密码过期,帐户也可以自动禁用。 -f 参数将设置密码过期后帐户被禁用的天数。零表示立即禁用。

$ sudo useradd -f 30 willy
$ sudo getent shadow willy
willy:!!:18171:0:99999:7:30::

一个实际的例子

在实践中,在创建新用户帐户时可能会使用其中几个参数。例如,如果我需要为 Perry 创建一个帐户,我可能会使用以下命令

$ sudo useradd -u 1020 -c "Perry Example" \
-G tgroup -b /home2 \
-s /usr/bin/zsh \
-e 20201201 -f 5 perry

请参阅以上各节以了解每个选项。使用以下命令验证结果

$ getent passwd perry; getent group perry; getent shadow perry; id perry
perry:x:1020:1020:Perry Example:/home2/perry:/usr/bin/zsh
perry:x:1020:
perry:!!:18171:0:99999:7:5:20201201:
uid=1020(perry) gid=1020(perry) groups=1020(perry),3000(tgroup)

一些最后的建议

useradd 命令是任何 Unix(不仅仅是 Linux)管理员的“必备知识”。重要的是要理解它的所有选项,因为用户创建是您希望第一次就做对的事情。这意味着要有一个经过深思熟虑的命名约定,其中包括为您的企业中的用户保留的专用 UID/GID 范围,而不仅仅是在单个系统上——尤其是在您在不断发展的组织中工作时。

接下来阅读什么
标签
Alan Formy-Duval Opensource.com Correspondent
Alan 拥有 20 年的 IT 经验,主要在政府和金融部门。他最初是一家增值经销商,后来转入系统工程领域。Alan 的背景是高可用性集群应用程序。他在 Oracle Press/McGraw Hill 出版的《Oracle Solaris 11 系统管理》一书中撰写了“用户和组”以及“Apache 和 Web 堆栈”章节。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.