![在 Ubuntu 服务器上通过 PAM 禁用 Root 用户的密码登录](https://linux22.com/image/793107/%E5%9C%A8%20Ubuntu%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E9%80%9A%E8%BF%87%20PAM%20%E7%A6%81%E7%94%A8%20Root%20%E7%94%A8%E6%88%B7%E7%9A%84%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95.png)
我有一台 Ubuntu 服务器(Ubuntu 22.04.3 LTS(GNU/Linux 5.15.0-1049-oracle aarch64)),我在上面托管了一些项目,在系统管理领域我算是新手,但知道一些设置sshd
更安全的基本知识。现在,我知道了root
坏处。我已经尽了相当大的努力来保证安全。
在服务器中,我有:
SSHd
更改了正在监听的端口- 通过 SSH 密钥设置身份验证
- 设置并启用,
libpam-google-authenticator
并使其成为强制性的,适用于所有用户,包括root
使用本指南来自 ubuntu/canonical - 在 中设置以下选项
/etc/ssh/sshd_config
:
LoginGraceTime 2m
PermitRootLogin yes
MaxAuthTries 6
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey,keyboard-interactive
KbdInteractiveAuthentication yes
UsePAM yes
- 根据相同 2FA 指南的设置,对 PAM 进行更改(
/etc/pam.d/sshd
):
# Standard Un*x authentication. Comment to disable normal passwd handling
#@include common-auth
# Standard Un*x password updating.
@include common-password
auth required pam_google_authenticator.so
auth required pam_permit.so
现在,我担心的是,通常,我会选择PermitRootLogin prohibit-password
,但事实证明,为了处理keyboard-interactive
,它必须是(请参考几年前的这篇 ServerFault 帖子)。
现在的问题来了。我显然根本不想允许通过 SSH 进行密码验证root
,但我确实希望能够root
通过 SSH 进行访问;使用privatekey
(使用密码保护)和 2FA 通过google-authenticator
。我可能会稍后返回并设置sshd_config
此类登录在另一个端口上,并且仅来自 X IP 地址,但我离题了。理论上,这对于我的小型项目服务器来说应该足够安全。
在这种情况下,为了确保 passwd 不是批准的方法,而无需更改相关sshd_config
行,是否有一种方法可以通过 PAM 为指定用户指定“密码被拒绝”?或者,这是否仍包含在 中PasswordAuthentication no
?root
是否通过注释掉@include common-auth
来处理/etc/pam.d/sshd
?
或者,简单地说,什么是确保在无法改变的情况下root
拒绝密码验证的最佳方法,以确保允许外部 root 登录的(合理)安全的 ssh 实例?PermitRootLogin
yes
我尝试了常用的 google-fu 来查找类似的问题、类似的设置或配置 PAM 以拒绝单个用户密码的方法。类似的信息来自 2017 年,因此评论询问这个主题会非常困难。(我也在 StackOverflow 上发布了这个帖子,但后来被删除了,据我所知,这是最接近这类问题的地方)