如何在CentOS上使用双重身份验证

在本教程中,您将学习如何在CentOS 7上使用一次性密码进行SSH上的双重身份验证。

无论您托管什么类型的数据,保护对CVM的访问权限都是防止您的信息泄露的重要手段。默认情况下,您需要密码才能登录,您还可以配置密钥对以获得更高的安全性。但是,我们还可以用另外一种方法令其更安全:那就是基于时间的一次性密码(TOTP)。

TOTP允许您使用一次性密码(每30秒更改一次)为SSH启用双重身份验证。通过将此方法与常规密码或公钥(或两者)相结合,您可以添加额外的安全层,从而进一步确保您的服务器得到充分保护。

本教程将说明如何安装必要的软件,配置系统以使用双重身份验证(2FA),并将TOTP与现有安全功能结合使用。

准备

  1. 本教程适用于运行CentOS 7的CVM服务,如果您还没有CVM服务器,可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器
  2. 在您的服务器上启用防火墙,如果您使用的是腾讯云的CVM服务器,您可以直接在腾讯云控制台中的安全组进行设置。
  3. 您需要带有身份验证器应用程序的客户端设备,例如Google身份验证器Authy
  4. 更新您的系统:
sudo yum update && sudo yum upgrade

注意 本教程是为非root用户编写的。您需要具有sudo权限。

安装OATH包

在本节中,我们需要在您设备上安装相关软件,以便在CentOS 7上设置双重身份验证。该软件将在您的CVM上生成密钥,然后将其与客户端设备上的应用程序配对,生成一个一次性密码。

安装必要的软件包来启用EPEL存储库,该存储库托管您正在查找的软件包:

sudo wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo rpm -Uvh epel-release-latest-7.noarch.rpm

接下来,安装您将用于生成密钥和密码的软件包:

sudo yum install liboath gen-oath-safe pam_oath

CentOS 7使用几个OATH库来生成其密钥。它生成的TOTP与Google身份验证器以及各种其他流行的身份验证应用程序兼容。

生成密钥

既然已经安装了软件包,您将使用它们来生成密钥。客户端设备上的软件使用这些密钥生成TOTP。要了解这些密码与您已使用的密码之间的区别,让我们来分解一下TOTP概念:

  • 基于时间 - 生成的密码将每30-60秒更改一次。这意味着如果攻击者试图使用蛮力破解,几乎是不可能的。
  • 一次性 - 密码仅对单个身份验证有效,从而最大限度地降低重放攻击的风险。即使您的TOTP在发送到服务器时被截获,它也会在您登录后失效。

以下说明将允许您指定要为其生成密码的用户。如果要为多个用户配置双重身份验证,请对每个用户执行以下步骤。

注意 请务必准备好您的手机或移动设备,因为您需要将密码添加到身份验证器。如果您尚未下载验证器应用程序,请下载。

  • 生成密钥:
gen-oath-safe example-user totp

替换example-user为您启用双因素身份验证的用户名。totp选项指定基于时间的一次性密码,而不是基于计数器的密码。

  • QR码将显示在您的终端中,您可以使用移动设备扫描以设置密码:

您还会注意到QR码上方和下方显示的一些其他信息。值得注意的是,URI这行开头的密钥为您提供了一个十六进制代码,您可以使用它来手动配置设备上的代码。您还会在包含用户名的行上看到另一个十六进制代码。第二个十六进制代码将类似于以下内容:

HOTP/T30 example-user - 961497ad4942e19507006c1e849ab271c1f1cb75
  • 将上面的行复制到新文件/etc/liboath/users.oath中,该文件将存储每个用户的密钥:
echo 'HOTP/T30 example-user - 961497ad4942e19507006c1e849ab271c1f1cb75' | sudo tee /etc/liboath/users.oath
  • 对要为其创建唯一双重密钥的每个用户重复此过程,或重复上一步骤,替换用户名,以便为多个用户使用相同的密钥。
  • 在您注销之前,请仔细查看“配置身份验证设置”部分(下面),以避免被锁在您的CVM之外。

您已完成生成密钥并将其添加到客户端的过程,但在这些设置生效之前需要一些其他配置。请仔细阅读本教程中的以下部分,以获取有关如何对所有SSH登录尝试进行双重身份验证的说明。

配置身份验证设置

本教程中的TOTP身份验证方法使用PAM或可插入身份验证模块。PAM将低级认证机制集成到可以为不同应用程序和服务配置的模块中。因为您正在使用其他软件,所以您需要配置PAM以正确验证用户身份。

警告 强烈建议您在配置身份验证设置时打开另一个终端会话。如果断开连接以测试身份验证或未正确配置某些内容时,您不会被锁定在CVM之外。您也可以使用Lish重新获得访问权限。

  • 使用sudo权限打开/etc/pam.d/sshd,并添加下面那些引用pam_oath.so的行(此处已注释标记,但您可以省略#后面的所有内容)。该行必须在指定的行之间添加:
auth    required    pam_sepermit.so
auth    substack    password-auth
auth    required    pam_oath.so usersfile=/etc/liboath/users.oath window=10 digits=6 #Add this line
auth    include     postlogin

此行指定了四个条件:作为附加身份验证方法的PAM OATH模块,用户文件的路径,指定将接受密码短语的窗口(以说明潜在的时间同步问题),以及6位数字验证码。

注意 如果您按照其余说明进行操作并发现仍无法连接,请尝试添加debug=1password-auth行尾,以便在身份验证失败时为您提供更多信息: auth required password-auth debug=1

  • 编辑/etc/ssh/sshd_config,替换example-user为您要为其启用双重身份验证的任何系统用户。这里包含注释(以#开头),但不应添加到实际配置文件中:
# This line already exists in the file and should be changed from 'no' to 'yes'
ChallengeResponseAuthentication yes
​
...
​
# These lines should be added to the end of the file
Match User example-user
    AuthenticationMethods keyboard-interactive

如果您为多个用户创建了TOTP并且您希望它们都使用双因素身份验证,请为每个用户创建额外的Match User块,并复制上面显示的格式。

注意 如果要全局强制执行双重身份验证,则可以在Match User之外单独使用AuthenticationMethods指令。但是,在向所有用户提供双重凭证之前,不应该这样做。

  • 重新启动SSH守护程序以应用这些更改:
sudo systemctl restart sshd

恭喜!现在启用了双重身份验证。当您通过SSH连接到CVM时,身份验证过程将按如下方式进行:

注意 如果您的SSH客户端在您输入双重令牌之前断开连接,请检查是否为SSH启用了PAM。您可以通过编辑/etc/ssh/sshd_config来执行此操作:查找UsePAM并将其设置为yes。不要忘记重新启动SSH守护程序。

结合双重验证和公钥验证(可选)

此部分是可选的。如果您想使用公共密钥身份验证而不是TOTP密码,请按照下列步骤操作:

注意 在完成本节之前,请确认您的公钥已复制到您的CVM。通过在终端中输入ssh-add -l来查看已安装的SSH密钥。

  1. 设置PasswordAuthenticationno,修改/etc/ssh/sshd_config文件中的AuthenticationMethods行:
PasswordAuthentication no
...
Match User example-user
    AuthenticationMethods publickey,keyboard-interactive

根据需要为每个用户在AuthenticationMethods指令中配置此设置。当这些用户中的任何一个登录时,他们将需要提供他们的SSH密钥,并且他们也将通过TOTP进行身份验证。请务必重新启动SSH守护程序以应用这些更改。

  1. 接下来,您需要更改PAM配置。注释或省略/etc/pam.d/sshd文件中的以下行:
# auth       substack     password-auth

您现在应该能够使用SSH密钥作为第一种身份验证方法并将验证码作为第二种身份验证方法登录。要测试您的配置,请注销并尝试通过SSH再次登录。您将被要求提供6位数的验证码,因为密钥验证不会产生提示。

警告 如果您或您系统上的用户使用此方法,请确保SSH密钥和身份验证器应用程序位于不同的设备上。这样,如果一台设备丢失或受损,您的凭据仍将是独立的,双重身份验证的安全性将保持不变。

结论

对TOTP使用双重身份验证时,需要考虑的重点是您已配置身份验证器应用程序的设备的物理安全性。请确保您的手机或设备使用密码保护,以便即使它落入坏人之手。如果您丢失了存储凭据的电话或设备,则可以使用控制台访问您的CVM并禁用双重身份验证。如果发生这种情况,您应该在此期间切换到另一种强化的SSH访问方法,例如公钥认证。

虽然双重身份验证是一项不错的安全功能,但总体的安全性是一个持续的过程,而不是仅仅通过添加额外的身份验证层就可以实现的。如果想为您的数据提供最佳保护,请始终进行安全的操作。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《Use One-Time Passwords for Two-Factor Authentication with SSH on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

App与后台通信:从文本协议到二进制协议

本文主要总结了心悦俱乐部 App 的接入层从文本协议到二进制 jce 协议迭代过程中的技术方案。

1.6K10
来自专栏耕耘实录

再议Linux中一些发行版中默认下载或上传工具curl的使用

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1393
来自专栏云计算教程系列

为你的CVM设置SSH密钥吧!

认证是用于证明您有权执行某项操作的信息,例如登录到系统。认证通道是身份验证系统向用户传递因素或要求用户回复的方式。通俗的来讲,密码和安全令牌就是身份验证证明,计...

1952
来自专栏Kirito的技术分享

八幅漫画理解使用JSON Web Token设计单点登录系统

博主前言 这篇转载的文章和上一篇《JSON Web Token - 在Web应用间安全地传递信息》文章均为转载,是我个人在研究 jwt 时浏览下来发现的两篇质...

3585
来自专栏贾老师の博客

OAuth 协议详解

1212
来自专栏云计算教程系列

如何在Ubuntu 18.04上使用HTTP / 2支持设置Nginx

Nginx是一个快速可靠的开源Web服务器。由于其低内存占用,高可扩展性,易于配置以及对各种协议的支持,它获得了普及。

3953
来自专栏惨绿少年

SSH服务详解

第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Wo...

3760
来自专栏java达人

将linux下的rm命令改造成mv到指定的目录下

来源:博客园-BigBao的博客 链接:http://www.cnblogs.com/smail-bao/p/6347347.html(点击文末阅读原文前往) ...

26610
来自专栏PHP在线

从输入url开始能做哪些优化

此文主要讲的事情是如何让用户快点看到首屏页面,其主要影响因素是延迟和解析渲染耗时。有关安全部分其实也是优化的一部分。我们着重说下网络部分。

1454
来自专栏Laoqi's Linux运维专列

linux安全配置

今天清早登录服务器发现很多暴力狗(使用ssh端口破解登录密码),真不知道这些人有啥意思,破解了无非是把我的服务器当作肉鸡再去攻击其他服务器,目的无非就是证明你有...

4655

扫码关注云+社区

领取腾讯云代金券