![禁用控制台和 SSH 中的密码登录,仅允许基于密钥的登录。用户应该能够提升](https://linux22.com/image/1603150/%E7%A6%81%E7%94%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%92%8C%20SSH%20%E4%B8%AD%E7%9A%84%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95%EF%BC%8C%E4%BB%85%E5%85%81%E8%AE%B8%E5%9F%BA%E4%BA%8E%E5%AF%86%E9%92%A5%E7%9A%84%E7%99%BB%E5%BD%95%E3%80%82%E7%94%A8%E6%88%B7%E5%BA%94%E8%AF%A5%E8%83%BD%E5%A4%9F%E6%8F%90%E5%8D%87.png)
我在 virtualbox 上运行 Debian。只有 2 个用户:root 和 user。
我想完全关闭控制台以及通过 ssh 对 root 和用户的基于密码的身份验证。
我希望用户能够使用私钥登录,并能够提升为 root 权限或运行 sudo。
要关闭 ssh,我这样做
PasswordAuthentication no
PermitRootLogin no
但控制台登录仍然有效。在 /etc/shadow 中插入无效哈希或在 /etc/passwd 中为两个用户设置 /usr/sbin/nologin 会禁用 sudo 和 su。
答案1
要禁用虚拟终端的自动生成,请在中设置以下内容/etc/systemd/logind.conf
:
NAutoVTs=0
ReserveVT=0
[email protected]
可能默认启动,因此请禁用它:
systemctl disable [email protected]
我认为你需要重新启动systemd-logind.service
:
systemctl restart systemd-logind.service
并手动停止任何现有的[email protected]
:
systemctl stop "getty@tty*.service"
这可能不会终止所有使用 tty 的进程,因此您可能需要检查 的输出以ps
查找以/dev/tty*
作为控制终端的进程并处理它们。-t
的选项ps
可能会有所帮助。
或者只是重新启动。
相关片段man 5 logind.conf
:
NAutoVTs=
取正整数。配置默认分配多少个虚拟终端 (VT),当切换到这些虚拟终端且之前未使用时,将自动生成“autovt”服务。这些服务从[email protected]
相应 VT TTY 名称的模板单元实例化,例如[email protected]
。默认情况下,[email protected]
链接到[email protected]
。换句话说,当用户切换到未使用的虚拟终端时,登录提示会动态启动。因此,此参数控制 VT 上有多少个可用的登录“getty”。如果某个 VT 已被其他子系统使用(例如,图形登录),则不会尝试这种激活。请注意,配置的 VTReserveVT=
始终受这种激活的影响,即使它不是使用该NAutoVTs=
指令配置的 VT 之一。默认为6
。设置为时0
,将禁用“autovt”服务的自动生成。
ReserveVT=
取正整数。标识一个虚拟终端,该终端应无条件保留以进行[email protected]
激活(见上文)。使用此选项选择的 VT 将无条件标记为繁忙,因此其他子系统不会分配它。此功能可用于确保无论其他子系统分配了多少个 VT,始终有一个登录“getty”可用。默认为6
(换句话说,Alt-F6 上始终有一个“getty”可用)。设置为时0
,VT 保留被禁用。