[Debian Etch]SVN+Apache2.2+MySQL认证 配置指南[mod_authnz_external]
Posted | archive
首先说,Apache2.2支持HTTP认证,来源有多种,但是支持第三方MySQL数据表认证的MOD就少了,mod_auth_mysql是最著名的,也是最早烂的,我根本在etch上编译不起;其次是 libapache2-mod-auth-pam 加 libpam-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