LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 793|回复: 0

Apache + mod_auth_mysql 为subversion做出认证

[复制链接]
发表于 2006-12-10 22:34:04 | 显示全部楼层 |阅读模式
一直以来想用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 );
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表