背景
近来很多知名企业都出现了密码泄露,通过单一的密码对敏感和重要信息进行保护已经面临越来越多的挑战,因此业内对多重认证的呼声也越来越高,而其中的双因子认证得到了业界的普遍认可。
什么是双因子认证双因子认证Two-factor authentication(即 2FA),是一种通过组合两种不同的验证方式进行用户身份验证的机制。
在这种多重认证的系统中,用户需要通过两种不同的认证程序:
提供他们知道的信息(如用户名/密码)
再借助其他工具提供用户所不知道的信息(如用手机生成的一次性密码)
SSH 双因子认证实现思路在 SSH 服务器端安装 Google 身份验证器服务器端组件,这样,在使用密码或密钥登录 SSH 服务器时,同时通过与 Google 身份验证器相匹配的客户端所提供的验证信息来确认登录者的身份和权限。这里的客户端可以使用Google 身份验证器Google Authenticator应用,也可以使用我们开发的、采用同一个 RFC 规范的“运维密码”微信小程序。
Google 身份验证器所采用的算法规范基于 TOTP RFC 草案。
(题外话,RSA 硬件令牌,也是采用了类似的机制,只不过客户端是硬件的;而最近 Apple 公司的一些服务所需要的双因子认证也是一样的,但是其用于呈现验证信息的是手机或平板上的 iOS 内部组件,非独立应用。)
关于Google 身份验证器为了鼓励广泛采用双因子认证的方式,Google 公司发布了Google 身份验证器Google Authenticator,这是一款开源的、可基于开放规则(如 HMAP/ 基于时间)生成一次性密码的软件。它是一款跨平台软件,可运行在 Linux、Android、iOS 上。Google 公司同时也支持插件式鉴别模块pluggable authentication module PAM ,使其能和其它适用于 PAM 进行验证的工具(如 OpenSSH)协同工作。
Google 身份验证器分为两个部分,分别是服务器端组件和客户端应用,都称之为“Google 身份验证器”,这里,我们为了澄清起见,会在说明时指明。
关于运维密码Google 公司所开发的身份验证器以简洁著称,但也因此缺乏一些必要的特性,比如备份功能——这使得使用该身份验证器的人时时处于手机丢失的恐慌之中。(虽然 Google 提供的服务器端和自身的服务也提供了紧急验证码,以用于这种情况下的自救,但是很多采用 Google 身份验证器的服务并不支持和提供紧急验证码)
作为一家紧密关注于运维安全、积极倡导信息安全的技术社区,Linux 中国 久已有开发一个新的替代品的想法。恰逢微信推出小程序平台,我们感觉到这正是一个良机,可以充分利用到微信和小程序的便利之处,又适合小程序的使用情境。因此,由 Linux 中国旗下的 LCTT 技术组的白宦成同学独立开发了一款旨在移动互联网场景中提供更好的多因子认证体验的小程序:运维密码。
顺便说一句,在产品初步成熟之后,我们已经将该小程序开源给社区,代码托管于 GitHub:LCTT/WeApp-Password ,希望更多的人能够受益和共同完善它,有什么功能需求、错误反馈请到 GitHub 上提出 issue,也欢迎发送拉取请求给我们。
此外,大家在使用过程中,发现什么问题或需要帮助,也可以加入微信体验群:
或添加开发者的微信号:ixiqin_com ,添加备注:“运维密码”,直接与开发者沟通。
言归正传,我们来看看如何使用“运维密码”来为你的 SSH 服务提供双因子认证支持。
如何开始首先我们需要一些准备工作:
一台运行着 OpenSSH 服务(版本大于 6.2)的 Linux 主机
一台能运行微信的智能手机
一台支持 SSH 登录的终端
在 Linux 系统中安装 Google 身份验证器服务器端组件第一步需要在运行着 OpenSSH 服务的 Linux 主机上安装 Google 身份验证器服务器端组件。按照如下步骤安装 Google 身份验证器及其 PAM 模块。
用安装包安装 Google 身份验证器服务器端组件如果你不想自己构建 Google 身份验证器服务器端组件,在几个主流 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google 身份验证器服务器端组件的二进制程序和 PAM 模块。
在 Ubuntu 上安装 Google 身份验证器服务器端组件:
sudo apt-get install libpam-google-authenticator
在 Fedora 上安装 Google 身份验证器服务器端组件:
sudo dnf install google-authenticator
在 CentOS 上安装 Google 身份验证器服务器端组件,需要首先启用 EPEL 软件库,然后运行如下命令:
sudo yum install google-authenticator
编译安装 Google 身份验证器服务器端组件首先,安装构建 Google 身份验证器所需的软件包。
在 Debian、 Ubuntu 或 Linux Mint 上:
sudo apt-get install wget make gcc libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:
sudo yum install wget make gcc pam-devel
然后下载 Google 身份验证器服务器端组件的源代码:
git clone https://github.com/google/google-authenticator.git
编译安装 Google 身份验证器服务器端组件:
cd google-authenticator/libpam./bootstrap.sh./configuremake
如果构建成功,你会在目录中看到 pam_google_authenticator.so 和 google-authenticator 两个二进制文件。