进一步部署 Google Authenticator:Apache 模块

Google Authenticator 是个好东西。它不仅可以增强 Google 账户登录的安全性,更因为它开源的特性,被部署到别的地方使用。比如 Linux PAM、WordPress 等,使用户可以借助 Google 的这套 OTP 方案,增强自己的服务器、网站和个人电脑的安全性。笔者之前就写过一篇详细的教程《用 Google Authenticator 加强 VPS 及 WordPress 甚至桌面电脑的安全性》,介绍如何把 Google Authenticator 部署到服务器、WordPress 和个人电脑上。如果你觉得这还不够安全的话,本文将会教会你如何把它部署到 Apache 里。

进一步部署 Google Authenticator:Apache 模块

一、Google Authenticator 的 Apache 模块的优势

如何增强服务器的安全性?这个问题向来都是站长们的讨论焦点。从 SSH 登录方面来说,可以限制 IP 地址登录,可以禁用密码登录(仅用公钥登录),可以用 Fail2ban 来对付它们,甚至可以把尝试暴力破解的 IP 加到 iptables 黑名单中等。但是,Web 前端怎么办?总不能限制 IP 地址访问吧?比如 WordPress 的管理后台和 phpMyAdmin 的登录页面,就是很容易遭到攻击的地方。为了防御这种人肉攻击,简单点地做法是用mod_auth_basicmod_auth_digest 来进行验证,高档一点的话,可以用 中的双向 TLS 认证。但是前者太简单,如果页面是 的话,密码是明文传输的,对攻击者来说十分方便的,而后者相对来说比较复杂,要自己建立并维护一个 CA,或者需要花钱去请第三方 CA 签名证书。而 Google Authenticator 的 Apache 模块 mod_authn_google 则提供一种经济、方便、简洁、有效的认证方式:动态密码认证。

相对 mod_auth_basic 来说,mod_authn_google 的密码是动态的,更不易被猜解;相对 mod_ssl 的双向 TLS 认证来说,mod_authn_google 免去了额外请第三方 CA 签名的资金和复杂的配置 CA 证书的过程的痛苦。

二、安装 mod_authn_google

由于这不是官方模块,所以必然是要我们自己来下载安装的。这个项目的主页在这里,但是它的下载列表中提供的模块是有 Bug 的,如果不想自己修复 Bug 的话,可以在这里下载到 Bug 修复后的 mod_authn_google

注意,这个模块是在 64 位 Linux 下编译的,如果你用的是 32 位的系统,请下载源码后自行编译。

下载得到的是一个 .so 的库文件,可以使用 apxs2 脚本来安装,以 Ubuntu 等基于 APT 和 dpkg 的发行版为例,这个脚本可以通过安装 apache2-prefork-dev 包得到。

sudo apt-get install apache2-prefork-dev

接下来便可使用 apxs2 来安装模块:

sudo apxs2 -i -a -n authn_google mod_authn_google.so

各参数含义:

-i   安装   -a   自动添加 LoadModule 语句,方便加载   -n authn_google   安装后模块的名字   mod_authn_google.so   刚才下载得到的模块的文件名  

由于这是一个已经编译好的模块了,所以除了用脚本来自动安装,也可以手工安装:

sudo cp mod_authn_google.so /usr/lib/apache2/modules/

echo "LoadModule authn_google_module /usr/lib/apache2/modules/mod_authn_google.so"| sudo tee /etc/apache2/mods-available/authn_google.load

三、配置 mod_authn_google

首先要建一个供它存放认证信息的地方,比如 /etc/apache2/ga_auth,接下来编辑 /etc/apache2/mods-available/authn_google.conf 文件,以下是范例:

<Directory/secret> # 要加上验证的目录

Options FollowSymLinks Indexes ExecCGI

AllowOverride All # 允许每个目录下通过 .htaccess 覆盖这里的全局设置

Order deny,allow

Allow from all

AuthType Basic

AuthName "Secret" # 弹出窗口的提示信息

AuthBasicProvider "google_authenticator"

Require valid-user

GoogleAuthUserPath ga_auth # 保存认证信息的目录

GoogleAuthCookieLife 3600 # Cookies 有效时间,这段时间内不用再输密码,单位为秒

GoogleAuthEntryWindow 2 # 当时间不同步时,允许有这样的正负误差。以 30s 为单位

</Directory>

保存退出之后,再

sudo a2enmod authn_google && sudo service apache2 restart

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/18474.html