导读:本期聚焦于小伙伴创作的《如何使用双因素身份验证保护CentOS服务器的访问安全》,敬请观看详情。只靠密码登录CentOS服务器,在面对暴力破解或密码泄露时几乎毫无招架之力。双因素身份验证在输入密码之外,再要求一组动态口令或硬件凭证,即便密码外泄,攻击者没有第二步凭证也无法登入。本文以SSH服务为例,说明在CentOS上部署Google Authenticator PAM模块的具体做法,包括安装依赖、配置系统认证栈、修改sshd规则以及处理常见登录失败问题。同时对比了TOTP软件令牌与硬件密钥的适用场景,帮助运维人员根据实际条件选择方案,把服务器暴露面降到最低。

在CentOS服务器上仅使用密码或密钥登录SSH,依然可能因为弱口令、撞库或私钥泄露导致被入侵。双因素身份验证(2FA)通过叠加动态口令,让登录过程必须具备“知道的东西”和“拥有的东西”两类凭证,从而显著提升访问安全性。本文以CentOS 7/8为例,演示如何借助Google Authenticator实现SSH双因素验证。

如何使用双因素身份验证保护CentOS服务器的访问安全

一、双因素身份验证的基本原理

双因素身份验证是指结合两种不同类别的认证因子:第一类是知识因子,例如账号密码;第二类是持有因子,例如手机上的动态口令或硬件U盾。在SSH登录场景中,用户输入密码后,系统还会通过PAM(可插拔认证模块)调用TOTP(基于时间的一次性口令)校验逻辑,要求输入6位每隔30秒变化的数字。

这种机制的核心在于,即便攻击者在公网扫到开放22端口并掌握了你的密码,由于没有绑定在你手机里的密钥种子,也无法生成正确的动态码。CentOS使用的PAM框架允许我们在不修改SSH程序本身的情况下,插入额外的认证步骤,这也是Linux服务器落地2FA的通用做法。

二、安装与基础配置

首先需要在CentOS上安装Google Authenticator的PAM模块和命令行工具。使用yum或dnf均可完成,命令如下:

# 安装EPEL源(若未配置)
yum install -y epel-release
# 安装Google Authenticator PAM模块
yum install -y google-authenticator

安装完成后,对需要开启2FA的普通用户执行初始化。以当前用户身份运行google-authenticator命令,工具会交互式生成密钥并展示二维码。

# 为当前用户生成TOTP配置
google-authenticator

# 交互过程关键选择
Do you want me to update your "/home/user/.google_authenticator" file? (y/n) y
Do you want to disallow multiple uses of the same authentication token? y
By default, tokens are good for 30 seconds... Do you want to enable time skew? n
...

执行后,终端会显示一个secret key和二维码,使用Google Authenticator、FreeOTP等App扫码绑定。生成的配置文件<code>.google_authenticator</code>保存在用户家目录,权限应为600,防止其他用户读取。

三、修改PAM与SSH服务配置

要让SSH在密码之后追加动态码校验,需要编辑两个地方:一是PAM的sshd配置,二是sshd主配置文件。先修改<code>/etc/pam.d/sshd</code>,在文件末尾追加一行。

# 在 /etc/pam.d/sshd 末尾添加
auth required pam_google_authenticator.so

然后编辑<code>/etc/ssh/sshd_config</code>,确保以下参数设置正确,使SSH使用PAM且支持键盘交互认证。

# /etc/ssh/sshd_config 关键项
UsePAM yes
ChallengeResponseAuthentication yes
# 若希望密码和动态码在同一提示下输入,可保持默认
# 若希望先密码后动态码分两步,可设置:
# AuthenticationMethods publickey,password publickey,keyboard-interactive

修改完毕后重启sshd服务使配置生效。注意在测试阶段务必保留一个已有会话,避免配置错误导致无法登录。

# CentOS 7
systemctl restart sshd
# CentOS 8
systemctl restart sshd.service

四、登录验证与常见问题

重新打开终端尝试SSH连接,输入密码后系统会提示<code>Verification code:</code>,此时填入App中的6位动态码即可登入。如果配置为公钥加2FA,则先完成密钥握手,再要求动态码。

ssh user@192.168.0.1
Password:
Verification code:
Last login: ...

常见故障包括:手机时间与服务器不同步导致令牌失效,可用<code>ntpdate</code>校准;SELinux阻止PAM读取家目录文件,可临时设permissive模式排查;以及root用户未生成.google_authenticator文件却强制开启2FA,造成root无法登录。建议先对非root账号开启,确认无误后再决定是否覆盖root。

五、软件令牌与硬件密钥的对比

除了手机App生成的TOTP,也可以使用支持U2F的硬件密钥(如YubiKey)配合pam_u2f模块实现2FA。两者对比如下:

方案部署成本抗钓鱼能力适用场景
TOTP软件令牌低,免费App即可中,依赖用户不截图密钥个人服务器、小团队
U2F硬件密钥高,需购买设备高,基于挑战应答防中间人企业内网、高安全需求

TOTP方案胜在零成本且易于批量推广,适合大多数CentOS运维场景;硬件密钥则更能抵御高级钓鱼,但需考虑丢失备用问题。实际落地时可要求关键账号同时使用两类因子做冗余。

六、运维建议

开启双因素后,仍应保留SSH端口访问白名单、fail2ban防暴破等配套手段。2FA不是银弹,而是纵深防御的一环。定期审计<code>.google_authenticator</code>文件权限,并在员工离职时及时删除对应配置,避免凭证残留。

对于批量服务器,可通过配置管理工具(Ansible等)统一下发PAM配置与用户密钥模板,减少人工逐台操作。这样既能保证CentOS访问安全策略一致,也方便后续平滑升级认证模块版本。

CentOS双因素身份验证SSH修改时间:2026-08-08 02:39:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。