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

来自菜鸟教程
跳转至:导航、​搜索


状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅:
本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


介绍

系统管理的一个基本部分是配置和管理用户和组。 此任务的一部分涉及监视所有系统实体的登录功能。

在本指南中,我们将介绍用户管理和身份验证日志背后的基本思想。

我们将在 Ubuntu 12.04 VPS 上探索这些概念,但您可以在任何最新的 Linux 发行版上跟进。

我们在上一节中说过,您服务器上的某些用户可能与服务相关联,不打算用作普通帐户。

在本节中,我们将讨论如何以多种方式限制这些用户的登录能力。

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

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

这方面的一个例子是“/etc/passwd”文件中的“messagebus”用户:

less /etc/passwd | grep messagebus
messagebus:x:102:104::/var/run/dbus:/bin/false

最终值是登录成功时运行的 shell 或命令。 在这种情况下,该值设置为“/bin/false”。

如果我们尝试以 root 用户身份登录到 messagebus 用户,我们将看到没有任何反应。 我们没有切换到新用户:

sudo su messagebus

让我们尝试登录“sshd”用户:

sudo su sshd
This account is currently not available.

我们收到这条信息性消息是因为 sshd 的 shell 设置为“/usr/sbin/nologin”:

less /etc/passwd | grep sshd
sshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin

那么,如何使用这些方法限制用户的登录呢?

我们可以使用“usermod”工具将 shell 从合法 shell 更改为以下虚拟值之一:

sudo usermod -s /usr/sbin/nologin username

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

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

您可以通过键入以下内容查看散列密码:

sudo less /etc/shadow
root:$6$r79Dod3Y$3hi3QklpGEQMxwQGEss4ueNNPkoUrqUe3SwyAacaxl.Lmgq1r9i4mTblV1z6NfKMNXH1Cpnq.4iKhOiQd7Riy1:15953:0:99999:7:::
daemon:*:15455:0:99999:7:::
bin:*:15455:0:99999:7:::
sys:*:15455:0:99999:7:::
sync:*:15455:0:99999:7:::
games:*:15455:0:99999:7:::
man:*:15455:0:99999:7:::
. . .

第二个字段(第一行中以“$6$r79Dod3Y#3...”开头的字段)包含散列密码值。

如您所见,系统帐户有一个星号 (*) 而不是一个复杂的哈希值。 在第二个字段中带有星号的帐户尚未设置密码,并且在更改之前无法通过密码进行身份验证。

我们可以通过在哈希值前面加上感叹号 (!) 来禁用密码值(实际上,使帐户的密码等于星号值)。

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

passwd 命令可以使用“-l”标志锁定并使用“-u”标志解锁:

sudo passwd -l username
sudo less /etc/shadow | grep username
username:!$6$vpNJ3oFe$5GSh2aU2BDcpdjvQeNFzh0zTgyRUl26x4dn77mFE/vaoXwd19m7okX44jO8TWaVqNRL8vUVTAcZVmgUT8dR.4.:15953:0:99999:7:::

如您所见,哈希密码被保留,但通过放置“!”使其无效在它面前。

可以通过键入以下内容再次解锁该帐户:

sudo passwd -u username

使用“usermod”命令可以进行等效操作。 对应的标志是“-L”用于锁定,“-U”用于解锁:

sudo usermod -L username
sudo usermod -U username

注意:虽然这种限制访问的方法对于所有基于密码的登录都可以正常工作,但无需密码(例如,使用 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 user@host
user@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 上的用户身份验证是系统管理中一个相对灵活的领域。 有许多方法可以使用非常简单的工具来实现相同的目标。

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

在下一节中,我们将讨论如何监控用户登录。

身份验证,第 1 部分 - 如何在 Ubuntu 上查看 Linux 中的系统用户

身份验证,第 2 部分 - 如何在 Ubuntu 上限制用户的登录能力

身份验证,第 3 部分 - 如何在 Ubuntu 上监控系统身份验证日志

作者:贾斯汀·艾林伍德