1. 双因素认证概述
1.1 什么是双因素认证?
双因素认证(Two-Factor Authentication,简称2FA)是一种增强用户身份验证的安全机制,要求用户提供来自不同类别的两种独立凭证才能访问系统或服务。作为多重身份验证(MFA)最常见的形式,2FA结合了"知识因素"(用户知道的信息)和"拥有因素"(用户拥有的物品)。
典型的认证因素组合包括:
第一因素:传统密码或PIN码
第二因素:身份验证应用生成的一次性密码(OTP)、短信验证码、指纹、面部识别、物理安全密钥等。
1.2 为什么需要双因素身份验证
根据 IBM 的 数据泄露成本报告,10% 的数据泄露是由于凭据的泄露。攻击者可以相对轻松地通过网络钓鱼、间谍软件或暴力攻击窃取密码。传统的SSH认证主要依赖密码或SSH密钥。然而,这些方法存在以下安全隐患:
密码破解:弱密码容易被暴力破解或字典攻击
密码泄露:密码可能通过数据泄露、键盘记录器或网络钓鱼被窃取
密钥管理不当:SSH私钥可能被未授权访问或复制
凭证填充攻击:用户在不同系统间重复使用相同的凭据
实施双因子认证可以有效解决上述问题。即使攻击者获取了用户的密码或SSH密钥,仍需获取第二个因素才能访问账户。这种"分层防御"策略大大增加了攻击难度,显著提高了系统安全性。
2. 双因素认证的类型和工作原理
2.1 双因素认证的类型
根据使用的技术和实现方式,双因素认证可以分为以下几类:
基于软件的认证
TOTP(基于时间的一次性密码):基于时间算法生成的一次性密码,是目前最广泛应用的方案,如Google Authenticator、Authy等应用
HOTP(基于计数器的一次性密码):基于计数器算法生成的一次性密码
推送通知:通过移动应用推送的认证请求,用户只需点击确认
基于硬件的认证
U2F(通用第二因子):FIDO联盟推出的开放认证标准,支持多种硬件安全密钥
YubiKey:支持多种认证协议的硬件安全密钥
智能卡:集成芯片的卡片,需要专门的读卡器
2.2 双因子认证的工作原理

上面这张图展示了SSH双因素认证流程:
用户尝试通过SSH连接到系统
系统首先要求用户提供第一因素认证(通常是密码或SSH密钥)
验证第一因素后,系统请求第二因素认证
用户提供第二因素(如TOTP代码、确认推送或插入硬件密钥)
系统验证第二因素
验证成功后,建立SSH连接
3. Linux服务器配置双因素认证的方法(TOTP方案)
TOTP是最常见的双因子认证实现方式之一,利用基于时间算法生成的一次性密码。实现步骤如下:
3.1.1 安装必要的软件包
以Debian/Ubuntu系统为例:
sudo apt update
sudo apt install libpam-google-authenticator3.1.2 配置Google Authenticator
终端执行以下命令为当前用户配置Google Authenticator:
sudo google-authenticator执行后会提示以下问题,建议按如下方式选择:
是否创建基于时间的一次性密码? 按“y”继续。
终端会显示一个二维码和密钥。使用手机从应用市场下载Google Authenticator、身份验证器等手机App扫描二维码,或手动输入密钥,即可绑定账户。
接下来需要输入手机App上生成的随机密码进行验证。之后会提示是否更新主目录下的
.google_authenticator文件。这个文件保存了所有配置和紧急码,按"y"继续。后面还会弹出几个对话框,建议按“y”继续完成所有配置即可。
3.1.3 配置PAM以支持双因素认证
编辑SSH的PAM配置文件:
sudo vim /etc/pam.d/sshd在文件开头添加以下行(确保该行位于其他认证行之前):
auth required pam_google_authenticator.so对于Ubuntu 22.04以上系统,还需要注释以下行,以避免在采用SSH公钥加双因素认证时出现多余密码提示:
#@include common-auth3.1.4 修改SSH配置
编辑SSH服务器配置文件:
sudo vim /etc/ssh/sshd_config确保以下设置:
ChallengeResponseAuthentication yes
# Ubuntu 22.04以上系统需要配置该参数
KbdInteractiveAuthentication yes
UsePAM yes
# 强制使用ssh公钥认证和双因素认证
AuthenticationMethods publickey,keyboard-interactive保存文件后重启SSH服务使更改生效:
sudo systemctl restart sshd3.1.5 测试TOTP双因子认证
现在可以通过SSH连接到系统进行测试:
ssh username@server_ip系统会提示:
Verification code:打开手机上的认证App,输入当前6位验证码即可完成登录。
4. 安全最佳实践
4.1 安全配置建议
监控认证日志:定期检查
/var/log/auth.log中的认证尝试限制登录尝试:配置
fail2ban等工具防止暴力破解禁用密码登录:完全禁用密码,仅使用SSH密钥+双因素认证
定期轮换认证密钥:定期更新TOTP密钥和SSH密钥
使用防火墙限制SSH访问:只允许来自可信IP的SSH连接
5. 结论
对Linux服务器的SSH服务启用双因素认证是提高系统安全性的关键措施。通过结合两种不同类型的认证因素,可以大大减少因密码泄露或凭证填充攻击导致的安全事件。本文介绍的TOTP方案是实施双因素认证的经济高效方式,适用于大多数Linux服务器环境。
评论区