分享SSH安全加固:通过微软Authenticator实现SSH双因子认证

  • A+
所属分类:Security

为防止公司密码出现泄露,现服务器增加双因子认证。

什么是双因子认证

双因子认证Two-factor authentication(即 2FA),是一种通过组合两种不同的验证方式进行用户身份验证的机制。

在这种多重认证的系统中,用户需要通过两种不同的认证程序:

  • 提供他们知道的信息(如用户名/密码)
  • 再借助其他工具提供用户所不知道的信息(如用手机生成的一次性密码)

SSH 双因子认证实现思路

在 SSH 服务器端安装 Google 身份验证器服务器端组件,这样,在使用密码或密钥登录 SSH 服务器时,同时通过与 Google 身份验证器相匹配的客户端所提供的验证信息来确认登录者的身份和权限。这里的客户端使用微软Authenticator应用,也可以使用Google Authenticator应用,不过这个应用没有备份的功能。

关于Google 身份验证器

为了鼓励广泛采用双因子认证的方式,Google 公司发布了Google 身份验证器,这是一款开源的、可基于开放规则(如 HMAP/ 基于时间)生成一次性密码的软件。它是一款跨平台软件,可运行在 Linux、Android、iOS 上。Google 公司同时也支持插件式鉴别模块PAM ,使其能和其它适用于 PAM 进行验证的工具(如 OpenSSH)协同工作。

Google 身份验证器分为两个部分,分别是服务器端组件和客户端应用,都称之为“Google 身份验证器”

关于Microsoft Authenticator

Microsoft Authenticator 应用可以帮助阻止未经授权的人员访问帐户;此外,它还能为工作或学校帐户(例如 alain@contoso.com)或个人 Microsoft 帐户(例如 alain@outlook.com)提供附加的安全层,以此阻止欺诈性的交易。

将该应用用于双重验证时,它采用以下两种工作方式之一:

  • 通知。 该应用会向设备发送一条通知。 请确保通知正确,然后选择“验证”。 如果无法识别该通知,请选择“拒绝”。 单击“拒绝”后,还可以将请求标记为欺骗性请求。
  • 验证码。 键入用户名和密码后,可以打开应用,并将“帐户”屏幕上提供的验证码复制到登录屏幕。 验证码充当第二种形式的身份验证

准备工作

  • 一台运行着 OpenSSH 服务(版本大于 6.2)的 Linux 主机
  • 一台安装了Authenticator应用的智能手机
  • 一台支持 SSH 登录的终端

在 Linux 系统中安装 Google 身份验证器服务器端组件

在 CentOS 上安装 Google 身份验证器服务器端组件,需要首先启用 EPEL 软件库,然后运行如下命令:

sudo yum install google-authenticator -y

编译安装 Google 身份验证器服务器端组件

sudo yum install wget make gcc pam-devel git autoconf automake libtool -y

然后下载 Google 身份验证器服务器端组件的源代码:
git clone https://github.com/google/google-authenticator-libpam.git

编译安装 Google 身份验证器服务器端组件:
cd google-authenticator-libpam &&./bootstrap.sh && ./configure && make

查看二进制文件
ls /usr/lib64/security/ | grep google

分享SSH安全加固:通过微软Authenticator实现SSH双因子认证

确定二进制文件后,安装

sudo make install

配置 google-authenticator 及生成验证密钥

./google-authenticator

生成验证密钥的时候,会再次确认信息。
Do you want authentication tokens to be time-based (y/n)

你想要生成基于时间生成验证码吗?这里需要需要输入 y

输入y之后会看到二维码和密钥,可以使用Authenticator app扫描绑定,如果扫描不了,可以通过输入密钥绑定。绑定之后输入app上的六位数字进行验证,验证通过后会生成几组恢复密钥,防止app验证无法通过时使用,恢复密钥是一次性的,使用过下次就没办法使用了。(安装 google-authenticator 过程中若出现二维码无法显示的问题,请检查系统中是否安装了二维码生成器:rpm - q qrencode,若未安装,请运行命令 yum install qrencode -y 安装后重试。如出现验证码无法通过,请确定系统时间是同步的)

分享SSH安全加固:通过微软Authenticator实现SSH双因子认证

保存 Google 服务器端组件的配置文件,Google 身份验证器虽然运行了,但是相关设置还没有保存,接下来会提示保存:

Do you want me to update your "/root/.google_authenticator" file? (y/n)

你想将配置文件更新到 /root/.google_authenticator 保存吗? 输入y回车

禁止同一令牌多次登录

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n)

你是否要禁用同一密钥多次登录,这将限制你每 30 秒只能使用该密钥登录一次,但这能够让你可以更多地被提醒受到了中间人攻击,甚至能够防止这种攻击。输入 y 回车。

时间容错设置

By default, a new token is generated every 30 seconds by the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y

默认情况下,密钥在 30 秒内有效,为了防止由于客户端与服务器时间偏移(时间相差太大)导致认证失败,google 身份验证器设计了时间容错措施。可以让你使用与当前时间偏移 1 到 4 分钟的密钥。  输入y回车

暴力破解防护

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y

为了避免暴力破解,可以启用速率限制,默认情况下,每 30 秒只能尝试 3 次。  输入y回车

配置完成后会在home目录下生成一个权限为 400 的隐藏文件

[root@ ~]# ll .google_authenticator 
-r-------- 1 root root 136 11月 19 17:28 .google_authenticator

配置 SSH 服务

使用如下命令在 /etc/pam.d/sshd 文件添加认证模块:

echo "auth required pam_google_authenticator.so" >>/etc/pam.d/sshd

在 Centos 6.6 或更低的版本中如果遇到无法进行 google-authenticator 验证的情况,请将 auth required pam_google_authenticator.so放在 /etc/pam.d/sshd 文件的最顶端进行测试一下。

配置挑战式密码认证:

sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config

重启 sshd 服务:
systemctl restart sshd.service

切记,如果你是远程登录到服务器上配置,切勿退出当前的 SSH 会话,而应该另外开一个会话去测试 SSH 登录。重启不会中断当前的 SSH 会话。

提示:使用xshell连接增加双因子认证的服务器,需要修改一下用户身份验证,Password改成Keyboard Interactive,可以先保存密码,连接的时候再输入六位动态密码。

分享SSH安全加固:通过微软Authenticator实现SSH双因子认证
分享SSH安全加固:通过微软Authenticator实现SSH双因子认证

如您还感觉这样不够安全,可以考虑公钥 + 密码 + app

配置 SSH 公钥双因子

echo "AuthenticationMethods publickey,keyboard-interactive:pam" >>/etc/ssh/sshd_config

重启服务,配置生效
systemctl restart sshd

部分转自Linux中国

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: