如何在 Debian服务器 上启用双因子身份验证

安全 容器化评论2,087字数 1336阅读模式

双因子身份验证就是指,需要两种身份验证才能完成账号有效性的验证,可以是密码、SSH 密钥,也可以是第三方服务,比如 Google Authenticator。这意味着单个验证方式的缺陷,不会影响账号的安全。本文我们将介绍如何在 Debian 服务器上启用双因子验证

如何在 Debian服务器 上启用双因子身份验证
请注意,本文涉及到多次修改 SSH 配置,当你修改配置时,请确保有至少两个到服务器终端的连接。打开的终端将一直保持,即便 SSH 服务重启。第二终端意味着你可以修复你在SSH配置的错误。

密钥和密码验证的SSH

SSH 支持对登录要求不止一个身份验证方法,我们首先启用密钥和密码验证。

在 /etc/sh/sshd_config 中的 SSH 服务器配置文件中的 AuthenticationMethods 选项中设置了身份验证方法。

当在 /etc/ssh/sshd_config 中新加一行配置,如下。这样在建立sshliaSSH 需要提交一个 SSH 密钥,然后提示输入密码:

AuthenticationMethods "publickey,password"

如果你想要对指定用户设置这些方法,那么请使用以下附加配置:

Match User joseph
     AuthenticationMethods "publickey,password"

当你已经编辑或保存了新的 sshd_config 文件,你应该通过运行以下程序来确保你没有犯任何错误:

sshd -t

任何导致 SSH 不能启动的语法或其他错误都将在这里标记出来。当 ssh-t 运行时没有错误,使用 systemctl 重新启动 SSH:

systemctl reload sshd

现在,你可以使用新终端登录,以核实你会被提示输入密码并需要 SSH 密钥。如果你用 ssh -v,例如 ssh -v joseph@example.com,你将可以看到登录的每一步,可以加多个v来获取更多的 debug 信息。

注意,如果你确实将密码设置成必需的身份验证方法,你要确保将 PasswordAuthentication 选项设置成 yes。

使用 Google Authenticator 的 SSH

Google 在 Google 自己的产品上使用的双因子身份验证系统可以集成到你的 SSH 服务器中。如果你已经使用了Google Authenticator,那么此方法将非常方便。

虽然 libpam-google-authenticator 是由 Google 编写的,但它是开源的。此外 Google Authenticator 是由 Google 编写的,但不需要 Google 帐户也能工作,多亏了 Sitaram Chamarty 的贡献。

如果你还没有在手机上安装和配置 Google Authenticator,请参阅这里的介绍

首先,我们需要在服务器上安装 Google Authenticatior 安装包。使用以下命令安装所需的软件包:

apt-get update
apt-get install libpam-google-authenticator

现在,我们需要在你的手机上使用 Google Authenticatior 工具注册服务器。这是通过运行我们刚才安装的 Debian 软件包完成的,在命令行下运行:

google-authenticator

运行这个程序时,会问到几个问题。你应该以适合你的设置的方式回答,最安全的选项是对每个问题回答y。如果以后需要更改这些选项,你可以简单地重新运行 google-authenticator 并选择不同的选项。

当你运行 google-authenticator 时,一个二维码会被打印到终端上,二维码下方的代码样例如下:

Your new secret key is: 75YD5PTE6R65BYFR2AWQGUV6FE
Your verification code is 781629
Your emergency scratch codes are:
  12321432
  29069242
  34406891
  34387624
  79357602

你应该将所有这些代码记录到一个像密码管理器一样安全的位置。emergency scratch codes 是单一的使用代码,应急时使用。即使你的手机不可用,它总是允许你访问。

要将服务器注册到Authenticator App中,只需打开应用程序并点击右下角的红色加号即可。然后选择扫描条码选项,扫描打印到终端的二维码。你的服务器和应用程序现在连接。

回到服务器上,我们现在需要编辑用于 SSH 的 PAM (可插入身份验证模块),以便它使用我们刚刚安装的身份验证器安装包。PAM 是独立系统,负责 Linux 服务器上的大多数身份验证。

需要修改的 SSH PAM 文件位于 /etc/pam.d/sshd ,用以下命令编辑:

vim /etc/pam.d/sshd

在文件顶部添加以下行:

auth required pam_google_authenticator.so

此外,我们还需要注释掉这一行 "@include common-auth”,这样 PAM 就不会提示输入密码,修改后如下:

# Standard Un*x authentication.
# @include common-auth

接下来,我们需要编辑 SSH 服务器配置文件:

vim /etc/ssh/sshd_config

改变 ChallengeResponseAuthentication 的值为 yes,以便我们启用键盘交互的认证方式:

ChallengeResponseAuthentication yes

接下来,添加以下代码行来启用两个身份验证方案:SSH 密钥和谷歌认证器(需要键盘交互):

AuthenticationMethods "publickey,keyboard-interactive"

在重新加载 SSH 服务器之前,最好检查一下在配置中没有出现任何错误,执行以下命令测试:

sshd -t

如果没有标识出任何错误,用新的配置重载 SSH:

systemctl reload sshd.service

现在一切都应该开始工作了。现在,当你登录到你的服务器时,你将需要使用 SSH 密钥,并且当你被提示输入:

Verification code:

打开 Authenticator APP 并输入为您的服务器显示的 6 位代码。

文章末尾固定信息

继续阅读
 
joseph
  • 本文由 joseph 发表于 2018年12月5日
  • 除非特殊声明,本站文章许可协议为"署名-非商用-相同方式共享 4.0",转载请保留原链、作者等信息。
广告也精彩
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证