Google Authenticator加强apache安全
上一篇日志中提到通过Google Authenticator来增强sshd的安全,其实Google Authenticator的动态认证应用范围非常广,不仅仅只是对于sshd的增加。其也可以用于对vsftpd、lightdm、screen、xscreen、su、sudo、samba等等,只要是调用到pam模块的服务—————具体ls下/etc/pam.d目录,我们都可以在其认证之前增加google动态认证。配置方法同sshd相同。配置完后,重启服务让配置生效。
难道Google Authenticator仅仅局限于对pam相关应用的增强吗?肯定不止。其还可以应用到web方面。其原理也非常简单。类似于在ssh上的应用,只不过是生成apache的相关模块。该模块的用法有点类似于使用 mod_auth_basic 或 mod_auth_digest 来进行验证 。费话了半天,最重要的还是看操作。
一、安装 mod_authn_google模块
该项目所在的地址为:
https://code.google.com/p/google-authenticator-apache-module/downloads/list
如上图所示,下载时选择针对apache的下载。下载安成后,不能直接解包安装。因为这个版本是有bug的。需要替换其中的一个文件——— mod_authn_google.c 。View Download
1[root@localhost tmp]# tar jxvf GoogleAuthApacheModule_v01.bz2
2google-authenticator-apache-module/base32.c
3google-authenticator-apache-module/base32.h
4google-authenticator-apache-module/googleauth.conf
5google-authenticator-apache-module/hmac.c
6google-authenticator-apache-module/hmac.h
7google-authenticator-apache-module/Makefile
8google-authenticator-apache-module/mod_authn_google.c
9google-authenticator-apache-module/README
10google-authenticator-apache-module/sha1.c
11google-authenticator-apache-module/sha1.h
12[root@localhost tmp]# cd google-authenticator-apache-module/
13[root@localhost google-authenticator-apache-module]# ll
14总计 60
15-rw-r--r-- 1 www www 2477 2011-04-30 base32.c
16-rw-r--r-- 1 www www 1391 2011-04-30 base32.h
17-rw-r--r-- 1 www www 1655 2011-04-30 googleauth.conf
18-rw-r--r-- 1 www www 2495 2011-04-30 hmac.c
19-rw-r--r-- 1 www www 919 2011-04-30 hmac.h
20-rw-r--r-- 1 www www 287 2011-04-30 Makefile
21-rw-r--r-- 1 www www 15370 2011-04-30 mod_authn_google.c //注意该文件一定要先替换掉。
22-rw-r--r-- 1 www www 1478 2011-04-30 README
23-rw-r--r-- 1 www www 10966 2011-04-30 sha1.c
24-rw-r--r-- 1 www www 1195 2011-04-30 sha1.h
25[root@localhost google-authenticator-apache-module]# make &&make install
make install 安装完成后,可能会出现一个报错,内容如下:
1sudo cp .libs/mod_authn_google.so /usr/local/apache2/modules/
2cp: 无法创建一般文件“/usr/local/apache2/modules/”: 没有那个文件或目录
3make: *** [install] 错误 1
这个错误没关系的,因为作者在创作该模块时,不是在centos/redhat上创建的(也有可能作者是源码包编译的apache),这个不去管他。通过系统自带的apxs脚本进行安装配置(另外一些发行版上可能叫做apxs2,该工具会自动完成cp到apache的模块目录下)。
1apxs -i -a -n authn_google mod_authn_google.so
各参数含义:
- -i 安装
- -a 自动添加 LoadModule 语句,方便加载
- -n authn_google 安装后模块的名字
- mod_authn_google.so 刚才下载得到的模块的文件名
也可以手动完成(以下两步操作的效果同上面apxs安装的效果是一样的),先复制模板文件
1cp .libs/mod_authn_google.so /etc/httpd/modules/
再打开httpd.conf文件,加入如下一行即可:
1LoadModule authn_google_module /usr/local/apache2/modules/mod_authn_google.so
二、apache conf文件配置
修改想要使用google认证的虚拟主机的配置如下:
1Alias /testlink "/var/www/html/testlink"
2<Directory "/var/www/html/testlink">
3Options FollowSymLinks Indexes ExecCGI
4AllowOverride All # 允许每个目录下通过 .htaccess 覆盖这里的全局设置
5Order deny,allow
6Allow from all
7AuthType Basic
8AuthName "Secret" # 弹出窗口的提示信息
9AuthBasicProvider "google_authenticator"
10Require valid-user
11GoogleAuthUserPath /tmp/googletest # 保存认证信息的目录
12GoogleAuthCookieLife 3600 # Cookies 有效时间,这段时间内不用再输密码,单位为秒
13GoogleAuthEntryWindow 2 # 当时间不同步时,允许有这样的正负误差。以 30s 为单位
14</Directory>
三、配置用认证
按照Google Authenticator加强ssh安全 里的方法安装google-authenticator命令,当然也可以从其他有该命令的机器上复制生成的~/.google_authenticator文件来用。将相存放的路径和上面配置中的一致,比如上例中是在/tmp/googletest目录下 (现网中千万不要这样放,因为tmp目录是一个存放临时文件的目录。一般用都有修改权限 。)
1cp ~/.google_authenticator /tmp/googletest/361way
2chmod 640 361way //避免其他用户修改该文件的内容
3chown root:apache 361way //让apache用户组具有读取该文件的权限
注:文件名即后面打开页面时要输入的用户名,密码就是google动态口令;允许按此方法生成多个用户 。
四、可能遇到的错误
错误1:
1[root@localhost modules]# /etc/init.d/httpd restart
2停止 httpd: [确定]
3启动 httpd:httpd: Syntax error on line 206 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib64/httpd/modules/mod_authn_google.so into server: /usr/lib64/httpd/modules/mod_authn_google.so: ELF file OS ABI invalid
出现该错误的原因很简单,太懒惰了。直接使用了该项目wiki页面上提供的编译好的模块 。因为该模块编译时的linux环境可能和我们在用的环境有区别,导致出该错误。下载源代码后重新编译即可。
错误2(apache的错误日志中查看):
1Cookie in header: "(null)"
2**** PW AUTH at T=1357464913 user "aaa"
3(2)No such file or directory: check_password: Could not open password file: /tmp/googletest/(null)
4user aa: authentication failure for "/testlink/": Password Mismatch
没有替换上面提到的bug文件,不过将密码文件的名字修改为“(null)” 就可以使用了,不过仍然会有bug —— 用户名可以使用任意,但动态密码一定要对,不对仍然不能验证通过。
备注:
bug修复后的验证日志也在apache的error_log日志中,access日志中不会记录 。具体如下:
1**** COOKIE AUTH at T=1357464923
2Cookie in header: "google_authn=361way:1357468521:2a26GUrnKDk8+Zp8wD37jGa3+5A=:"
3Found cookie Expires "1357468521" Valid "2a26GUrnKDk8+Zp8wD37jGa3+5A="
4Match cookie "2a26GUrnKDk8+Zp8wD37jGa3+5A=" vs "2a26GUrnKDk8+Zp8wD37jGa3+5A="
5User 361way auth granted from cookie
6Created cookie expires 1357469123 (time = 3600) hash is AoVthaJtnVbRSy3TjwpuHdhoawI= Cookie: google_authn=361way:1357469123:AoVthaJtnVbRSy3TjwpuHdhoawI=:
本文参考以下资料:
https://wzyboy.im/post/869.html (ubuntu的安装步骤)
https://code.google.com/p/google-authenticator-apache-module/issues/detail?id=3 (该模块的wiki页面)
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/google-authenticator-apache/2191.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.