|
一直以来想用mod_auth_mysql模块作为subverion的认证前端,这几天闲下来,就试着做了一次,其实我们可以用更安全的认证方式,那就 是使用ssl加密,并接合这个mod_auth_mysql来做认证,可能效果会更好,但是我没有做个这个,所以只好让大家自己试试了,感觉上也无非就是 为apache编译上ssl, 然后弄好证书,就行了。
好了,闲话少说,一步一步来,
首先明确目的:就是使用mysql来存储我们需要的用户,使用apache的Basic来为subversion的代码库做认证。
第一步我们必须安装apache, 我的版本是2.0.59,直接从apache的主战下载回来,
然后解开得到一个目录,使用下面的配置来安装
./configure --prefix=/usr/local/apache --enable-so --enable-dav && make && make install来安装好apache,
这样apache就被安装在/usr/local/apache了。
MySQL的安装就不讲,大家找找文档,很多的。
再到subversion的主战上去下载一个subversion回来,解开后,使用下面的配置来安装:
./configure --with-apxs=/usr/local/apache/bin/apxs && make && make install
注意一些库,neon, db4等等。
安装好了之后,找一个目录建立subversion的库, 使用如下命令建一个代码库
mkdir /home/svn
然后:svnadmin create /home/svn
注意一下权限问题。
这样subversion就建立好了。
然后先编辑一个apache的配置文件先试试看看是不是可以通过apache来访问subversion,
首先需要LoadModule, 在apache的配置文件里加上:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so(这个模块令有它用,应该和本案没有什么关系)
这样就导入了模块了。
然后再在apache配置一个代码库:
<Location /svn>
DAV svn
SVNPath /home/svn
</Location>
启动subversion, 如果可以通过:127.0.0.1/svn看到subversion的代码库,那么就成功一小步。
下面,我们就需要使用mod_auth_mysql了。
大家去modules.apache.org 搜索或者是http://www.heuer.org/mod_auth_mysql/ 这里下载回来
http://www.heuer.org/mod_auth_mysql/mod_auth_mysql_1.9.tgz
解压后,进入目录使用下面的命令安装这个模块:
/usr/local/apache/bin/apxs -I "/usr/local/mysql/include" -L "/usr/local/mysql/lib" -cia -lmysqlclient mod_auth_mysql.c
注意这里的mysql库的位置根据你自己的位置做出改动。
apxs也是要根据你的情况做出改动的。
这样我们就安装好了这个模块,
然后我们就可以在apache的配置文件里配置认证了。
<Location /svn>
DAV svn
SVNPath /home/svn
AuthType Basic
AuthName Subversion
AuthMySQLHost localhost
AuthMySQLUser 你的数据库用户名
AuthMySQLPassword 你的数据库用户名密码
AuthMySQLDB 你的数据库名
# AuthMySQLPort 3306
AuthMySQLUserTable user_info
AuthMySQLTableUserName user_name
AuthMySQLTableUserPasswd user_passwd
#AuthMySQLTableUserHostGroup host_group
AuthMySQLHostTable host_info
AuthMySQLTableHostName host
#AuthMySQLTableHostHostGroup host_group
AuthMySQLGroupTable user_group
AuthMySQLTableGroupName user_name
AuthMySQLTableGroupGroupName user_group
#AuthMySQLTableGroupHostGroup host_group
AuthMySQLUserQueryCondition "have_svn=1"
AuthMySQLGroupQueryCondition 1
AuthMySQLAuthoritative On
AuthMySQLKeepAlive Off
AuthMySQLEnable On
AuthMySQLVirtualHost Off
Require valid-user
</Location>
然后使用如下的SQL语句建立数据库表:
CREATE TABLE `user_info` (
`id` int(11) NOT NULL auto_increment,
`user_name` varchar(50) NOT NULL,
`user_passwd` varchar(120) NOT NULL,
`have_svn` tinyint(4) default ''0'',
`host_group` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_name` (`user_name`)
) ENGINE=MyISAM
CREATE TABLE `user_group` (
`id` int(11) NOT NULL auto_increment,
`user_name` varchar(50) NOT NULL,
`user_group` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
CREATE TABLE `host_info` (
`id` int(11) NOT NULL auto_increment,
`host` varchar(50) NOT NULL,
`host_group` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM
建立好数据库后,
我们需要加入用户了。
由于apache使用加密的密码,我们先要创建这个加密的密码
使用apache自带的工具:
htpasswd -c mypassed test1
输入两次密码,然后编辑文件mypassed
拷贝出密码插入到user_info中区就可以了。
同时也要在host_info里加入相应的记录,
大家总是可以使用如下的语句测试一下:
select user_info.user_passwd from user_info, host_info where user_info.host_group = host_info.host_group and lower(''你的主机名'') like host_info.host and user_info.user_name=''你的用户名'' and ( have_svn=1 ); |
|