红联Linux门户
Linux协助

SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证

发布时刻:2017-03-30 10:26:54来历:linux.cn作者:Linux我国
本文叙述了怎么经过 Linux我国 所开发的微信小程序“运维暗码”完结在 Linux 体系上 OpenSSH 双因子认证,从而对 SSH 进行安全加固。
 
布景
近来许多知名企业都出现了暗码走漏,经过单一的暗码对灵敏和重要信息进行维护现已面对越来越多的应战,因而业界对多重认证的呼声也越来越高,而其间的双因子认证得到了业界的遍及认可。
 
什么是双因子认证
双因子认证(即 2FA),是一种经过组合两种不同的验证方法进行用户身份验证的机制。
在这种多重认证的体系中,用户需求经过两种不同的认证程序:
供给他们知道的信息(如用户名/暗码)
再凭借其他东西供给用户所不知道的信息(如用手机生成的一次性暗码)
 
SSH 双因子认证完结思路
在 SSH 服务器端装置 Google 身份验证器服务器端组件,这样,在运用暗码或密钥登录 SSH 服务器时,一起经过与 Google 身份验证器相匹配的客户端所供给的验证信息来承认登录者的身份和权限。这儿的客户端能够运用Google 身份验证器运用,也能够运用咱们开发的、选用同一个 RFC 标准的“运维暗码”微信小程序。
Google 身份验证器所选用的算法标准依据 TOTP RFC 草案。
(题外话,RSA 硬件令牌,也是选用了相似的机制,只不过客户端是硬件的;而最近 Apple 公司的一些服务所需求的双因子认证也是相同的,可是其用于出现验证信息的是手机或平板上的 iOS 内部组件,非独立运用。)
 
关于Google 身份验证器
为了鼓舞广泛选用双因子认证的方法,Google 公司发布了 Google 身份验证器,这是一款开源的、可依据敞开规矩(如 HMAP/ 依据时刻)生成一次性暗码的软件。它是一款跨渠道软件,可运转在 Linux、Android、iOS 上。Google 公司一起也支撑插件式辨别模块 PAM ,使其能和其它适用于 PAM 进行验证的东西(如 OpenSSH)协同作业。
Google 身份验证器分为两个部分,分别是服务器端组件和客户端运用,都称之为“Google 身份验证器”,这儿,咱们为了弄清起见,会在说明时指明。
 
关于运维暗码
Google 公司所开发的身份验证器以简练著称,但也因而缺少一些必要的特性,比方备份功用——这使得运用该身份验证器的人不时处于手机丢掉的惊惧之中。(尽管 Google 供给的服务器端和本身的服务也供给了紧迫验证码,以用于这种状况下的自救,可是许多选用 Google 身份验证器的服务并不支撑和供给紧迫验证码)
作为一家严密重视于运维安全、活跃倡议信息安全的技能社区,Linux 我国 久已有开发一个新的替代品的主意。恰逢微信推出小程序渠道,咱们感觉到这正是一个良机,能够充分利用到微信和小程序的便当之处,又适宜小程序的运用情境。因而,由 Linux 我国旗下的 LCTT 技能组的白宦成同学独立开发了一款旨在移动互联网场景中供给更好的多因子认证体会的小程序:运维暗码。
趁便说一句,在产品开端老练之后,咱们现已将该小程序开源给社区,代码保管于 GitHub:https://github.com/LCTT/WeApp-Password ,期望更多的人能够获益和一起完善它,有什么功用需求、过错反应请到 GitHub 上提出 issue,也欢迎发送拉取恳求给咱们。
此外,咱们在运用过程中,发现什么问题或需求协助,也能够加入微信体会群:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
或增加开发者的微信号: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
./configure
make
假如构建成功,你会在目录中看到 pam_google_authenticator.so 和 google-authenticator 两个二进制文件。
最终,将 Google 身份验证器的服务器端组件装置到适宜方位。其默许会装置到 /usr/local/lib/security 下,依据你的体系不同,你或许需求将其符号链接到 pam 库的方位(比方 CentOS 7 会在 /usr/lib64/security)。如下图所示:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
sudo make install
至此,Google 身份验证器服务器端组件装置完结。
 
装备 Google 身份验证器服务器端组件及“运维暗码”小程序
完结 Google 身份验证器服务器端组件的装置咱们只是完结了第一步,接着需求对 Google 身份验证器服务器端组件、“运维暗码”、OpenSSH 进行装备才干到达咱们预期的作用。
 
装备 google-authenticator 及生成验证密钥
运用以下指令生成验证密钥:
./google-authenticator 
生成验证密钥的时分,会再次承认信息。
Do you want authentication tokens to be time-based (y/n)
意思是:你想要生成依据时刻生成验证码吗?这儿需求需求输入 y。
输入 y之后你将看到一个代表着该“场景”密钥的二维码和密钥字符串,它运用如下二维码图形格局表明咱们数字形状的密钥(这儿也供给了一个用于在浏览器中再次显现该二维码的 URL,可是需求翻墙)。接着咱们要用到它在“运维暗码”上完结装备。
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
在二维码和密钥字符串后边,接着显现了一个当时的校验码和几个紧迫密钥。紧迫密钥你能够另行保存的一个安全的当地,以防你在无法运用 Google 身份验证器运用或“运维暗码”时运用(紧迫密钥是 8 位的,不同于一般的 6 位密钥,也是一次性运用的)。
SSH安全加固篇:经过“运维暗码”小程序完结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, tokens are good for 30 seconds. 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. If you experience problems with
poor time synchronization, you can increase the window from its default
size of +-1min (window size of 3) to about +-4min (window size of
17 acceptable tokens).
Do you want to do so? (y/n) 
意思是:默许状况下,密钥在 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) 
意思是:为了防止暴力破解,能够启用速率约束,默许状况下,每 30 秒只能测验 3 次。
输入 y回车。
装备完结
装备完结后会在home目录下生成一个权限为 400 的躲藏文件,如下图所示:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
 
装备运维暗码
翻开微信小程序
翻开微信,顺次点击“发现”,“小程序”:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
输入“运维暗码”并查找:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
点击“运维暗码”进入运用,然后点击右下角二维码图标:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
扫一扫装备 google-authenticator 时所生成的二维码,然后会识别出该场景信息,你能够依据需求修正场景信息,点击确认增加场景:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
增加完结:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
这样 Google 身份验证器就和“运维暗码”匹配上了。下面咱们要使 SSH 服务能够支撑该验证。
 
装备 SSH 服务
增加认证模块
运用如下指令在 /etc/pam.d/sshd 文件增加认证模块:
echo "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 会话。
 
测验登录
以上装备完结基本上就搞定了,下面咱们进行测验。
 
暗码登录测验
别的开一个终端窗口进行衔接,不要封闭当时的 SSH 衔接。
输入指令登录主机:
ssh root@10.112.2.3
首要输入服务器的暗码,接着会让输入“运维暗码”生成的 6 位数字密钥。
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
如下图:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
咱们能够看到,在登录的时分,需求协作“运维暗码”才干登录服务器。
 
公钥登录测验
假如运用公钥登录呢?以上装备是不是也是需求协作“运维暗码”才干登录的,咱们进行验证一下:
首要,咱们将本机的公钥复制到长途机器的 authorized_keys 文件中。
ssh-copy-id root@10.112.2.3
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
登录测验:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
咱们能够看到,不需求输入任何暗码和一次性密钥,直接登录到了体系。
 
结合运维暗码装备增强型SSH安全选项
针对上面公钥登录的测验,假如以为还不是很安全,咱们能够设定如下登录场景:公钥 + 暗码 + 运维暗码,咱们需求怎么做呢?
 
装备 SSH 公钥双因子
修正 /etc/ssh/sshd_config 装备文件:
echo "AuthenticationMethods publickey,keyboard-interactive:pam" >>/etc/ssh/sshd_config
重启 SSH 服务:
systemctl restart sshd.service
登录测验(相同,请新开窗口):
ssh root@10.112.2.3
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
能够看到,登录的时分是需求验证公钥、暗码,及输入“运维暗码”生成的密钥才干登录到体系。
没有密钥的状况下测验登录测验,如下图:
SSH安全加固篇:经过“运维暗码”小程序完结SSH双因子认证
 
总结
至此,本文完毕,更多的运用细节能够参照小程序内的协助。
如有过错及缺乏欢迎纠正。也欢迎咱们加入到这个小程序的开发傍边,甚至将这个小程序运用到你的运用场景中。
 
本文永久更新地址:http://www.138comgov138.com/linux/29595.html