安全路透社
当前位置:安全路透社 > 网络转载 > 正文

通过微信小程序“运维密码”实现SSH双因子认证

近来,京东、优酷等多家知名企业都发生了密码泄露,造成用户隐私泄露。可见,单一密码对敏感和重要信息进行保护力量越来越弱,所面临的挑战亦是愈发严峻。因此业内对多重认证的呼声也越来越高,而其中的双因子认证得到了业界的普遍认可。本文主要介绍SSH双因子认证,结合了当下热门的微信小程序的“运维密码”,来实现认证保护。

双因子认证机制

对于网络信息系统来说,能否识别使用者的身份,是能否确保安全的基础和关键。在实际应用中,许多网络信息系统都会要求使用者在使用系统之前,提供一些相关信息用以实现对使用者的身份认证。双因子认证(2FA)弥补了传统密码认证方法的很多弊端,是指结合密码以及实物(信用卡、SMS手机、令牌或指纹等生物标志)两种条件对用户进行认证的方法。

SSH双因子认证

在实现多重认证的系统中,用户需要通过两种不同的认证程序:用户知道的信息(如用户名/密码)和用户不知道的信息(如用手机生成的一次性密码),想必绝大部分系统管理员都知道OTP,OTP即一次性口令,最常见的一次性口令是基于时间的一次性口令(TOTP),最常见的方式是采用Google身份验证器Google Authenticator来提供基于时间的一次性口令。

在SSH服务器端安装Google身份验证器服务器端组件,这样,在使用密码或密钥登录SSH服务器时,同时通过与Google身份验证器相匹配的客户端所提供的验证信息来确认登录者的身份和权限。由于Google身份验证器没有办法备份场景,这使得使用该身份验证器的人时时处于手机丢失的恐慌之中。于是Linux中国旗下的LCTT技术组开发了一款旨在移动互联网场景中提供更好的多因子认证体验的小程序:运维密码,基于微信平台提供OTP口令管理功能。

如何使用“运维密码”为SSH服务提供双因子认证支持

第一步,需要在运行着OpenSSH服务的Linux主机上安装Google身份验证器服务器端组件。

首先,安装构建Google身份验证器所需的软件包。

在CentOS、Fedora或RHEL上:

1dc60005c94a7584b15d

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

1f7e0005b5ac2c3ba53c

接着,下载 Google 身份验证器服务器端组件的源代码:

1f8800022fb65d1c5930

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

1f8800022fdc1ec6e7ab

如果构建成功,你会在目录中看到pam_google_authenticator.so和google-authenticator两个二进制文件。

最后,将Google身份验证器的服务器端组件安装到合适位置。其默认会安装到 /usr/local/lib/security下,根据你的系统不同,你可能需要将其符号链接到pam库的位置(比如CentOS7会在/usr/lib64/security)。如下图所示:

1f800005b81df10220d1

1f7e0005b61c62b9fad3

至此,Google身份验证器服务器端组件安装完成。

第二步,需要对Google身份验证器服务器端组件、“运维密码”、OpenSSH进行配置

先配置Google身份验证器服务器端组件

使用以下命令生成验证密钥:

1f7f0005b5d2efd7127b

1f7f0005b5d32c27a02b

这里需要输入y,选择基于时间生成验证码

之后你将看到一个代表着该“场景”密钥的二维码和密钥字符串,它使用如下二维码图形格式表示我们数字形态的密钥

在二维码和密钥字符串后面,接着显示了一个当前的校验码和几个紧急密钥。紧急密钥你可以另行保存到一个安全的地方,以防在无法使用Google身份验证器应用或“运维密码”时使用。

1dc60005ca9e8ffbf97f

保存Google服务器端组件的配置文件,输入y。

1f7e0005b6e558018536

禁止同一令牌多次登录,输入y。

1f870002312546461f6b

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

时间容错设置,输入y。

1f880002313640996bc0

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

暴力破解防护,输入y。

1f7e0005b772aa55c32f

意思是:为了避免暴力破解,可以启用速率限制,默认情况下,每30秒只能尝试3次。

配置完成后会在home目录下生成一个权限为400的隐藏文件,如下图所示:

1f7f0005b70dfcdfd80b

然后配置运维密码

打开微信小程序,输入“运维密码”并搜索:

点击“运维密码”进入应用,然后点击中间的添加场景

1f7e0005b5008e14b92a

扫一扫配置google-authenticator时所生成的二维码,会识别出该场景信息,这样Google身份验证器就和“运维密码”匹配上了。

接着配置SSH服务

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

1f800005b9a1ac226809

配置挑战式密码认证:

1dc60005cbdf69ab49c4

重启sshd服务:

1dc60005cc0b4490a95a

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

到这一步配置已基本完成,下面我们进行测试。

另外开一个终端窗口进行连接,不要关闭当前的SSH连接。

输入命令登录主机:

1f7f0005b7ca5c7e4acd

首先输入服务器的密码,接着会让输入“运维密码”生成的6位数字密钥。如下图:

1f7f0005b47ac6526a95

我们可以看到,在登录的时候,需要配合“运维密码”才能登录服务器。

“运维密码”小程序资源占用小,不超过200K,只需要花费很少的流量,就可以实现和Google身份验证器Google Authenticator的全部功能。通过微信小程序“运维密码”实现在Linux系统上OpenSSH双因子认证,从而对SSH进行安全加固。

本文作者:杭州美创科技,转载请注明FreeBuf.COM

未经允许不得转载:安全路透社 » 通过微信小程序“运维密码”实现SSH双因子认证

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册