天天看点

进一步部署 Google Authenticator:Apache 模块

<a target="_blank"></a>

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

下载得到的是一个 .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

各参数含义:

<dl></dl>

<dt>-i</dt>

<dd>安装</dd>

<dt>-a</dt>

<dd>自动添加 loadmodule 语句,方便加载</dd>

<dt>-n authn_google</dt>

<dd>安装后模块的名字</dd>

<dt>mod_authn_google.so</dt>

<dd>刚才下载得到的模块的文件名</dd>

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

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

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

# 要加上验证的目录

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 为单位

保存退出之后,再

sudo a2enmod authn_google &amp;&amp; sudo service apache2 restart

即可,如果没有报错的话,现在现在 mod_authn_google 应该已经在工作了,访问 /secret 的话会提示输入用户名密码,但是我们没有添加用户,所以输啥都是错的。

认证用户是通过 google authenticator 提供的工具来生成认证文件的,将生成的认证文件复制到 googleauthuserpath 所对应的目录即可,比如/etc/apache2/ga_auth。

使用包管理器安装 libpam-google-authenticator 这个包。以 ubuntu server 为例:

sudo apt-get install libpam-google-authenticator

如果之前用过 google authenticator,请先将 ~/.google_authenticator 文件改名备份一下。

运行

google-authenticator

命令,把屏幕上的 qr 码扫描到装有 google authenticator 的手机中,并按照提示回答几个问题,生成新的 ~/.google_authenticator 文件。

这样便生成了一个有效的用户。将家目录中新生成的 .google_authenticator 文件复制到 /etc/apache2/ga_auth 目录下,文件名为用户名,并使用

sudo chmod 640 wzyboy &amp;&amp; sudo chown root:www-data wzyboy

(把 wzyboy 更换为相应的用户名)更改文件权限,以确保 apache 能读取它,便完成了一个用户的添加。如需更多用户访问,重复这些步骤即可。最后记得把家目录里的 .google_authenticator 文件改回来。

建议在浏览器的隐身窗口中进行调试以排除 cookies 的干扰。如果出错,可从 /var/log/apache2/error.log 中找答案。

补充:该模块在 google code 上的预编译文件有 bug,不读取 cookies,导致提示找不到 /etc/apache2/ga_auth/(null) 文件。这时一个比较搞笑的 wordaround 就是把你的用户认证信息文件重命名为 (null),然后就可以配合这个 bug 继续工作了。此时用户名输什么都可以,密码则是要保持正确的。这倒也别有一番风味……

原文发布时间为:2014-03-06

本文来自云栖社区合作伙伴“linux中国”

继续阅读