如何在Linux上使用chfn和usermod更改用户数据

时间:2020-01-09 10:38:58  来源:igfitidea点击:

用户帐户不只是用户名。了解如何从命令行设置和更改与Linux用户帐户关联的所有元数据。

GECOS字段

一次,Unix的先驱们没有自己的打印机。他们不得不将打印作业放到运行通用电气综合操作系统(GECOS)的通用电气大型机上。为此,Unix系统上的用户需要在GECOS系统上存储和使用帐户凭据。

创建了GECOS字段来存储这些凭据。这种非常特殊的需求早已成为历史,并且GECOS字段已重新用于存储与用户帐户所有者相关的其他数据。它可能有新工作,但保留了旧名称。它仍然被称为GECOS领域。

该字段与有关用户帐户的其他信息一起存储在/ etc / passwd文件中:

  • 帐户用户名。

  • 用户ID。

  • 组ID。

  • 用户帐户的主目录路径。

  • 用户登录时启动的shell。

这是finger命令和pinky命令检索它们显示的信息的地方。

chfn命令

" chfn"(更改手指信息)允许我们设置和更改GECOS字段中存储的信息。信息以逗号分隔的列表形式存储在该字段中。

在Ubuntu 18.04.1和Manjaro 18.1.0上已经存在chfn命令。它必须安装在Fedora 31上。使用以下命令进行安装:

sudo dnf install util-linux-user

让我们看看finger可以找到有关用户帐户dave所有者的信息。为了获得最大的信息,我们将使用-l(长格式)选项:

finger dave -l

这是可以找到的:

它检索帐户用户名,主目录和默认shell程序。这些都与用户帐户有关。他们不是指使用该帐户的真实人。我们可以使用" chfn"命令来存储有关实际人的信息。

chfn dave

以这种方式使用chfn会启动一个简短的交互式过程。提示我们输入GECOS字段可以保存的每条信息的数据值。每个数据值的当前值显示在方括号[]中。如果要保留当前数据,可以按Enter键,括号内的值将保留。

我们输入的信息是:

  • 房间数:512

  • 工作电话:555-4567

  • 家庭电话:555-5432

让我们检查一下" finger"是否拾取了新信息:

finger dave -l

是的,它确实。但是我们可能已经注意到,它没有提示我们更改全名。仅当我们使用sudo时才这样做。但是我们不必再次经历整个chfn会话,只是因为我们忘记使用sudo。我们可以单独更改任何数据值。

更改单个数据值

我们可以通过使用-f(全名)选项和sudo为用户帐户的所有者设置全名。

sudo chfn -f "Dave McKay" dave

如果我们再次使用finger进行检查:

我们可以看到已经添加了全名。

还有其他选项可以更改房间号码,家庭电话号码和工作电话号码。要更改房间(办公室)号,请使用-r(房间号)选项:

sudo chfn -r 633 dave

请注意,在某些发行版中,我们可以使用-o(办公房号)选项而不是-r选项。不久之后会更多。现在,要查看chfn版本的选项,请使用:

man chfn

要更改办公室电话号码,请使用-w(工作电话)选项:

sudo chfn -w 555-1122 dave

最后,要更改家庭电话号码,请使用-h(家庭电话号码)选项:

sudo chfn -h 555-6576 dave

让我们再次使用" finger"来查看是否所有这些更改都已被接受:

finger dave -l

成功。所有这些命令均有效,并且数据值已更新。

在其他用户帐户上使用chfn

对于更改我们自己的信息而言,如此之多,如何为其他用户更改GECOS信息呢?就这么简单。这样做时必须使用sudo,但这是唯一的区别。让我们检查一下为用户帐户mary设置了哪些数据:

finger mary -l

为此用户帐户设置了通常的默认信息。让我们添加到信息中:

sudo chfn mary

我们将像以前一样进行相同的会话,并会提示我们输入可以存储的每条信息的数据值。并且因为我们使用了sudo,所以要求我们提供全名数据值。

等一下,最后一个叫"其他"的项目是什么?

并非所有版本的" chfn"都支持它,并且只有在使用" sudo"时才能看到它,这就是为什么我们(故意)在以下情况下不使用" sudo"时没有看到它的原因:

chfn dave

其他数据值可以容纳我们喜欢的任何内容。没有任何规定或者预期的用途。

支持Other字段的chfn版本也提供了-o(other)选项来直接更改此值。由于办公室号码-o和其他号码-o之间的冲突,某些系统将-r用作房间号。

通过使用less,我们可以在/ etc / paswd文件中看到为用户帐户mary存储的数据:

less /etc/passwd

在支持它的系统上(检查chfn版本的man页),我们可以使用-o(other)选项直接设置其他字段:

sudo chfn -o "IGI Freelancer" dave

我们可以使用less命令检查用户帐户dave的数据:

less /etc/passwd

这就提出了一个明显的问题。如果chfn版本不支持"其他"字段,该如何更改?我们可以使用usermod命令来完成。

usermod命令

通过usermod命令,我们可以通过以下操作来修改用户帐户的各个方面:从组中添加或者删除用户帐户,以及更改其默认shell程序,也可以直接操作GECOS字段。

让我们仔细看看用户帐户mary的/ etc / passwd文件中的行。我们将使用grep为我们隔离该行。这将起作用,因为用户名必须唯一。只能有一个名为mary的用户帐户。

grep mary /etc/passwd

显示" etc / passwd"文件中的字段。冒号":"用作字段分隔符。从左到右,这些字段是:

  • 帐户用户名。

  • 表示该用户帐户密码的x会加密保存在/ etc / shadow文件中。

  • mary用户帐户的用户ID。

  • mary用户帐户的组ID。

  • GECOS字段。

  • mary用户帐户的主目录路径。

  • mary帐户所有者登录时启动的shell。

逗号用作GECOS字段中数据值的分隔符。GECOS字段中的值从左到右为:

  • 全名。

  • 房间(或者办公室)号。

  • 工作电话号码。

  • 家庭电话号码。

  • 其他信息。

注意," usermod"命令将整个GECOS字段设置为我们提供的新值。如果我们提供的只是该人的全名,那么GECOS字段中唯一的就是全名。这意味着我们必须提供希望保留的所有现有数据值。

这是一个例子。用户Mary已晋升,她将移至四楼。她正在获得一个新的办公室号码,一个新的工作电话号码,我们将添加她的中间名。她的其他字段值也将改变。尽管她的家庭电话号码不会改变,但我们必须在字符串中将其提供给usermod

我们需要使用-c(注释)选项,并且需要使用sudo运行命令。

sudo usermod -c "用户注释" mary

使用grep报告mary的/ etc / passwd文件的内容,向我们展示了已添加的新值。

grep mary /etc/passwd