[Debian Etch]SVN+Apache2.2+MySQL认证 配置指南[mod_authnz_external]

首先说,Apache2.2支持HTTP认证,来源有多种,但是支持第三方MySQL数据表认证的MOD就少了,mod_auth_mysql是最著名的,也是最早烂的,我根本在etch上编译不起;其次是 libapache2-mod-auth-pamlibpam-mysql ,这个也失败,因为PAM也停止开发了。

经过我千辛万苦Google了大半个月,终于发现了最好的Apache2.2验证MOD:mod_authnz_external

原理很简单,mod_auth_external会调用一个外部命令,如果命令以错误代码0退出,那么验证成功;如果以错误代码1等等退出,那么验证失败。OK,开始配置

apt-get install apache2
apt-get install subversion
apt-get install libapache2-svn

编辑 vim /etc/apache2/mods-enabled/dav_svn.conf
内容为

<Location /svn>
  DAV svn
  SVNPath /srv/svn
AuthName "Dormforce SVN" AuthType Basic AuthBasicProvider external AuthExternal auth_dormid require valid-user
</Location>

现在你已经有一个没有authentication的SVN跑起来了,利用的是apache2的DAV模块。

下载mod_auth_external for apache2.2的源码包

apt-get install build-essential
apt-get install apache2-threaded-dev
aot-get install apache2-prefork-dev

然后 tar -xvf mod_authnz_external-3.1.0.tar.gz,进入解压的目录
apxs -c mod_authnz_external.c
apxs -i -a mod_authnz_external.la

编译好了模块,接下来安装到Apache2,vim /etc/apache2/mods-enabled/authnz_external.load,输入

LoadModule authnz_external_module /usr/lib/apache2/modules/mod_authnz_external.so

好了,我们编辑Apache2主配置文件vim /etc/apache2/apache2.conf
在最后加上

AddExternalAuth auth_dormid /srv/auth_dormid/auth_dormid.py
SetExternalAuthMethod auth_dormid environment

OK,自己编写一个小小的python程序,查询MySQL数据库,如果环境变量USER和环境变量PASS和数据库中查询结果是一致的,那么sys.exit(0),否则sys.exit(1)

测试一下,/etc/init.d/apache2 restart重启apache,看看你的网站 /svn 目录,应该可以访问SVN啦。

下面我解释下配置文件里修改的内容对应的含义。
apache2.conf
 AddExternalAuth auth_dormid /srv/auth_dormid/auth_dormid.py
           关键词     执行命令路径
SetExternalAuthMethod auth_dormid environment
             关键词   通过系统环境变量传递认证值,同时可以设置为 pipe,管道

dav_svn.conf
AuthName "Dormforce SVN" 这里是浏览器弹出的提示窗口的文字
AuthType Basic       HTTP Basic认证,使用Basr64加密后传输
AuthBasicProvider external     认证来源是 mod_authnz_external
AuthExternal auth_dormid   上面设置的 关键词
require valid-user      需要成功认证的用户和密码才能访问页面

Comments