在 Ubuntu 服务器上通过 PAM 禁用 Root 用户的密码登录

在 Ubuntu 服务器上通过 PAM 禁用 Root 用户的密码登录

我有一台 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 noroot是否通过注释掉@include common-auth来处理/etc/pam.d/sshd

或者,简单地说,什么是确保在无法改变的情况下root拒绝密码验证的最佳方法,以确保允许外部 root 登录的(合理)安全的 ssh 实例?PermitRootLoginyes

我尝试了常用的 google-fu 来查找类似的问题、类似的设置或配置 PAM 以拒绝单个用户密码的方法。类似的信息来自 2017 年,因此评论询问这个主题会非常困难。(我也在 StackOverflow 上发布了这个帖子,但后来被删除了,据我所知,这是最接近这类问题的地方)

相关内容