Ubuntu用户登录权限管理:限制与配置指南

引言

系统管理的核心部分在于配置和管理用户与组。其中一项重要任务是监控所有系统实体的登录能力。

本指南将深入探讨用户管理和身份验证日志记录背后的概念。

我们将在Ubuntu 22.04服务器上探索这些概念,但您可以在任何现代Linux发行版上跟随操作。您可以参考我们的Ubuntu 22.04初始服务器设置指南来为本教程设置您的Ubuntu 22.04服务器。

正如前面系列教程中提到的,您服务器上的一些用户可能与服务相关联,并非作为常规账户使用。

在本文中,您将了解如何通过多种方式限制这些用户的登录能力。

如何使用 /etc/passwd 限制访问

限制登录能力的一种方法是将账户的登录 Shell 设置为特殊值。

一个典型的例子是 messagebus 用户,您可以使用 grep/etc/passwd 文件中搜索它。

less /etc/passwd | grep messagebus
输出
messagebus:x:102:105::/nonexistent:/usr/sbin/nologin

当登录成功时,最后一个字段是最终要运行的 Shell 或命令。在这种情况下,该值被设置为 /usr/sbin/nologin

如果您尝试使用 sudo su 切换到 messagebus 用户,将会失败。

sudo su messagebus
输出
This account is currently not available.

您收到此信息是因为 messagebus 用户的 Shell 被设置为 /usr/sbin/nologin

当您需要阻止用户登录时,可以使用 usermod 工具将用户的默认登录 Shell(通常为 /bin/bash)更改为一个不存在的 Shell,例如 nologin

sudo usermod -s /usr/sbin/nologin username

如何使用 /etc/shadow 限制访问

另一种类似的限制访问方法是使用 /etc/shadow 文件。该文件包含系统上每个用户的哈希密码值。

您可以使用 less 命令查看整个文件。

sudo less /etc/shadow
输出
. . . uuidd:*:19105:0:99999:7::: tcpdump:*:19105:0:99999:7::: sshd:*:19105:0:99999:7::: pollinate:*:19105:0:99999:7::: landscape:*:19105:0:99999:7::: lxd:!:19180:::::: sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::

最后一行的第二个字段(以 $y$j9T$4gyO… 开头的字段)包含了经过哈希处理的密码值。

系统账户的第二个字段是一个星号(*),而不是一个复杂的哈希值。具有星号的账户表示未设置密码,必须更改密码后才能通过密码进行验证。

您可以通过在哈希值之前加上感叹号(!)来禁用密码值(从而使具有与星号值等效的密码的账户)。

两个工具可以通过“锁定”指定的账户来实现此功能。

可以使用 passwd 命令的 -l 选项锁定账户,并使用 -u 选项解锁。

sudo passwd -l sammy
sudo less /etc/shadow | grep sammy
输出
sammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::

正如您所见,哈希密码被保留,但在前面加上感叹号以使其无效。

输入后,您的账户可以再次解锁。

sudo passwd -u sammy

用户可以使用 usermod 命令执行等效操作。对应的标志是 -L 表示锁定,而 -U 表示解锁。

sudo usermod -L sammy
sudo usermod -U sammy

注意

尽管此访问限制方法对于所有基于密码的登录都能正常运行,但仍然可以使用无需密码的登录方式(例如,通过SSH密钥)来进行登录。

如何使用 /etc/nologin 限制访问

可能会出现一些情况,您需要禁用除了 root 账户之外的所有登录方式。

这可能是因为进行了深度维护,或者是因为您的一个或多个用户账户被入侵。

无论如何,可以通过在 /etc/nologin 中创建一个文件来实现。

sudo touch /etc/nologin

这将阻止没有超级用户权限的任何账户登录。

如果 /etc/nologin 文件为空,这只是让用户返回到他们的本地 Shell,没有任何解释。

实际发生的是文件的内容被返回给用户。如果添加一条消息,用户将收到登录失败的解释。

sudo sh -c 'echo "Planned maintenance. Log in capabilities will be restored at 1545 UTC" > /etc/nologin'

现在当您尝试使用密码登录时,您会收到这条消息。

ssh sammy@host
输出
sammy@host's password: Planned maintenance. Log in capabilities will be restored at 1545 UTC Connection closed by host

只有 root 用户仍然可以正常登录。删除 /etc/nologin 文件以撤销登录限制。

sudo rm /etc/nologin

总结

Linux 上的用户认证是系统管理中一个相对灵活的领域。有很多方法可以使用广泛可用的工具来实现相同的目标。

现在您应该知道如何通过各种方法限制用户登录了。

在本教程系列的下一部分中,您将会复习如何监控用户登录情况。

bannerAds