如何在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 上的用户身份验证是系统管理中一个相对灵活的领域。 有许多方法可以使用非常简单的工具来实现相同的目标。
您现在应该知道如何通过各种方法限制使用。
在下一节中,我们将讨论如何监控用户登录。