介绍
系统管理的一个基本部分是配置和管理用户和组,该任务的一部分包括监控所有系统实体的功能日志。
在本指南中,我们将介绍用户管理和身份验证记录背后的想法。
我们将在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)中,您将查看如何监控用户登录。