如何限制 Ubuntu 用户的登录能力

介绍

系统管理的一个基本部分是配置和管理用户和组,该任务的一部分包括监控所有系统实体的功能日志。

在本指南中,我们将介绍用户管理和身份验证记录背后的想法。

我们将在Ubuntu 22.04 服务器上探索这些概念,但你可以跟随任何现代的 Linux 发行版。你可以通过遵循我们的指南来为本教程设置Ubuntu 22.04 服务器。

正如在本系列中所提到的(https://digitalocean.com/community/articles/how-to-view-system-users-in-linux-on-ubuntu),您的服务器上的某些用户可能与服务相关联,不打算作为常规帐户使用。

在本节中,您将查看如何以多种方式限制这些用户的登录功能。

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

限制登录功能的一种方法是将帐户的登录壳设置为特殊值。

一个例子是messagebus用户,您可以使用 grep/etc/passwd文件中搜索:

1less /etc/passwd | grep messagebus
1[secondary_label Output]
2messagebus:x:102:105::/nonexistent:/usr/sbin/nologin

最终值是登录成功时运行的壳或命令,在这种情况下,该值被设置为 /usr/sbin/nologin

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

1sudo su messagebus
1[secondary_label Output]
2This account is currently not available.

您会收到此消息,因为messagebus的壳设置为/usr/sbin/nologin

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

1sudo usermod -s /usr/sbin/nologin username

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

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

您可以使用查看整个文件:

1sudo less /etc/shadow
1[secondary_label Output]
2. . .
3uuidd:*:19105:0:99999:7:::
4tcpdump:*:19105:0:99999:7:::
5sshd:*:19105:0:99999:7:::
6pollinate:*:19105:0:99999:7:::
7landscape:*:19105:0:99999:7:::
8lxd:!:19180::::::
9sammy:$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7:::

第二个字段(在最后一行中以$y$j9T$4gyO...开头的字段)包含 hashed 密码值。

系统帐户有一个星座(*)而不是一个复杂的哈希值。在第二个字段中有一个星座的帐户没有密码设置,并且无法通过密码进行身份验证而没有更改。

您可以禁用密码值(实际上,创建一个与星值等同的密码帐户),通过以呼叫点(!)在哈希值之前。

两个工具可以通过锁定指定的帐户来做到这一点。

passwd命令可以用-l旗锁定,也可以用-u旗解锁:

1sudo passwd -l sammy
1sudo less /etc/shadow | grep sammy
1[secondary_label Output]
2sammy:!$y$j9T$4gyOQ5ieEWdx1ZdggX3Nj1$AbEA9FsG03aTsQhl.ZVMXatwCAvnxFbE/GHUKpjf9u6:19276:0:99999:7::::::

正如你所看到的,哈希密码被保留,但通过将一个!放在它前面而变得无效。

帐户可以通过键入重新解锁:

1sudo passwd -u sammy

使用usermod命令可使用等效操作,相应的标志为-L用于锁定,而-U用于解锁:

1sudo usermod -L sammy
2sudo usermod -U sammy

<$>[注] **注:**虽然这种限制访问方法对所有基于密码的登录都将正常运作,但没有密码的登录方法(例如,使用 ssh 密钥)仍然可用。

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

有些情况下,您可能需要禁用除了 root 之外的所有帐户登录。

这可能是由于深度维护,或者是因为您的一个或多个用户帐户受到威胁。

在任何情况下,这可以通过在 /etc/nologin 创建一个文件来实现:

1sudo touch /etc/nologin

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

用一个空的 /etc/nologin 文件,这只会让用户在没有任何解释的情况下返回本地壳。

真正发生的事情是,该文件的内容被返回给用户. 如果您添加消息,用户将收到登录失败的解释:

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

现在,当您尝试使用密码登录时,您将收到以下消息:

1ssh sammy@host
1[secondary_label Output]
2sammy@host's password:
3Planned maintenance. Log in capabilities will be restored at 1545 UTC
4
5Connection closed by host

根用户仍然可以正常登录。删除/etc/nologin文件以扭转登录限制:

1sudo rm /etc/nologin

结论

Linux 上的用户身份验证是系统管理的一个相对灵活的领域,有许多方法可以通过广泛的工具实现同样的目标。

现在你应该知道如何通过各种方法来限制使用。

在本教程系列的下一部分(https://www.digitalocean.com/community/articles/how-to-monitor-system-authentication-logs-on-ubuntu)中,您将查看如何监控用户登录。

Published At
Categories with 技术
Tagged with
comments powered by Disqus