侧边栏壁纸
博主头像
Noname

行动起来,活在当下

  • 累计撰写 2 篇文章
  • 累计创建 2 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux安全加固:为Linux服务器配置双因素认证

noname
2026-01-28 / 0 评论 / 0 点赞 / 19 阅读 / 0 字

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 双因子认证的工作原理

2fa.png

上面这张图展示了SSH双因素认证流程:

  1. 用户尝试通过SSH连接到系统

  2. 系统首先要求用户提供第一因素认证(通常是密码或SSH密钥)

  3. 验证第一因素后,系统请求第二因素认证

  4. 用户提供第二因素(如TOTP代码、确认推送或插入硬件密钥)

  5. 系统验证第二因素

  6. 验证成功后,建立SSH连接

3. Linux服务器配置双因素认证的方法(TOTP方案)

TOTP是最常见的双因子认证实现方式之一,利用基于时间算法生成的一次性密码。实现步骤如下:

3.1.1 安装必要的软件包

以Debian/Ubuntu系统为例:

sudo apt update
sudo apt install libpam-google-authenticator

3.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-auth

3.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 sshd

3.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服务器环境。

0

评论区