当前位置: 首页 > 科技观察

如何在Linux系统中为SSH添加双因素认证

时间:2023-03-17 13:13:20 科技观察

近日,多家知名公司密码泄露,业界对多因素认证的呼声也越来越高。在这个多因素认证系统中,用户需要经过两个不同的认证过程:提供他们知道的信息(如用户名/密码),然后使用其他工具提供用户不知道的信息(如手机-生成的性别代码)。这种组合通常称为双因素身份验证或两阶段验证。为了鼓励广泛采用双因素身份验证,Google发布了GoogleAuthenticator,这是一款开源软件,可以根据开放规则(例如HMAP/time-based)生成一次性密码。这是一款跨平台软件,可以运行在Linux、Android、iOS上。Google还支持PAM(pluggableauthenticationmodule),一种插件式认证模块,这样就可以和其他同样应用PAM进行认证的工具(如OpenSSH)协同工作。在本教程中,我们将介绍如何将OpenSSH与Google提供的身份验证器实现集成,从而为SSH服务设置双因素身份验证。我将使用Android设备生成一次性密码。对于本教程,我需要两件武器:(1)一个运行OpenSSH服务的Linux终端,以及(2)一个Android设备。在Linux系统上安装GoogleAuthenticator的第一步是在运行OpenSSH服务的Linux主机上安装GoogleAuthenticator。按照以下步骤安装GoogleAuthenticator及其PAM模块。从包中安装GoogleAuthenticator如果您不想自己构建GoogleAuthenticator,可以在多个Linux发行版上使用预编译包。安装包包含GoogleAuthenticator二进制文件和PAM模块。在Ubuntu上安装GoogleAuthenticator:$sudoapt-getinstalllibpam-google-authenticator在Fedora上安装GoogleAuthenticator:$sudoyuminstallgoogle-authenticator在CentOS上安装GoogleAuthenticator需要先启用EPEL软件库,然后运行以下命令:$sudoyuminstallgoogle-authenticator如果你不想使用编译好的安装包,或者你的Linux发行版没有列出,你可以自己编译:Linux上的GoogleAuthenticator首先,安装构建所需的包谷歌身份验证器。在Debian、Ubuntu或LinuxMint上:$sudoapt-getinstallwgetmakegcclibpam0g-dev在CentOS、Fedora或RHEL上:$sudoyuminstallwgetmakegccpam-devel然后下载GoogleAuthenticator的源代码并按如下命令编译。$wgethttps://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2$tarxvfvjlibpam-google-authenticator-1.0-source.tar.bz2$cdlibpam-google-authenticator-1.0$make如果构建成功,你会在目录中看到pamgoogleauthenticator.so和google-authenticator两个文件。***,将GoogleAuthenticator安装到合适的位置$sudomakeinstallTroubleshooting编译GoogleAuthenticator时,出现如下错误:fatalerror:security/pam_appl.h:Nosuchfileordirectory为了解决这个问题,请安装以下依赖包裹。在Debian、Ubuntu或LinuxMint上:$sudoapt-getinstalllibpam0g-dev在CentOS、Fedora或RHEL上:$sudoyuminstallpam-devel安装GoogleAuthenticator后,您需要在Linux主机上创建一个身份验证密钥,并在Android设备上注册,注意本次配置操作为一次性操作。我们将详细说明这是如何完成的:生成身份验证密钥在Linux主机上运行GoogleAuthenticator$google-authenticator您将看到一个QR码,它使用下图以数字形式表示我们的密钥。稍后我们将使用它在Android设备上进行配置。GoogleAuthenticator会询问一些问题,如果您不确定,请回答“是”。这个紧急备用验证码(图中紧急刮码)可以在丢失绑定的安卓设备时恢复访问(所以无法获取生成的一次性密码)。***妥善保存紧急备用验证码。在Android设备上运行GoogleAuthenticator我们需要在Android设备上安装GoogleAuthenticator应用来完成双因素认证,去GooglePlay下载并安装一个。在Android设备上运行GoogleAuthenticator,找到如下图所示的配置菜单。您可以选择“扫描条形码”或“输入提供的密钥”选项。“扫描条码”可以让您扫描二维码完成按键输入,您可能需要先安装扫描软件BarcodeScannerapp。如果选择“Enterprovidedkey”选项,则可以使用键盘输入验证密钥,如下图:不管以上两个选项,一旦成功,都会看到注册成功的提示和一个-时间密码,如下图所示:SSH服务器使用GoogleAuthenticator最后,我们需要修改两个文件,完成GoogleAuthenticator和OpenSSH服务的集成。首先修改PAM配置文件,命令及添加的内容如下:$sudovi/etc/pam.d/sshdauthrequiredpam_google_authenticator.so然后打开SSH配置文件,找到参数ChallengeResponseAuthentication,启用它。$sudovi/etc/ssh/sshd_configChallengeResponseAuthenticationyes***,重启SSH服务。在Ubuntu、Debian和LinuxMint上:$sudoservicesshrestart在Fedora(或CentOS/RHEL7)上:$sudosystemctlrestartsshd在CentOS6.x或RHEL6.x上:$sudoservicesshdrestartAuthenticate双因素身份验证运行绑定安卓设备上的GoogleAuthenticator获取一次性验证码,30秒内有效,过期后会生成新的验证码。现在,和往常一样,使用SSH登录终端$sshuser@ssh_server当提示输入验证码时,输入我们刚刚得到的验证码。验证成功后,输入SSH登录密码。双因素认证通过在用户密码前加一层,有效的保护了我们脆弱的用户密码。您可以使用GoogleAuthenticator来保护我们的其他密码,例如GoogleAccounts、WordPress.com、Dropbox.com、Outlook.com等。是否使用这项技术由我们决定,但采用双因素身份验证已经是一个行业的大趋势。原文链接:http://linux.cn/article-3725-1.html