概述
最近安装了redmine,一个灵活的项目管理系统,使用Ruby on Rails框架进行开发,跨平台且可以使用多种数据库(MySQL,PostgreSQL,SQLite)。然后安装了subversion版本控制系统,使用Apache的mod_auth_mysql模块为subversion做出认证以及验证,最后成功的将redmine与svn整合在一起,使用统一的用户进行读写权限的控制。
使用到的相关应用程序
CentOS 5.3平台
redmine-0.9.3
subversion 1.4.2
Apache 2.2.14
MySQL 5.0.77
安装redmine
提几个注意的地方:
在database.yml配置文件里面
production:
adapter: mysql
database: redmine
host: localhost
username: root
password: yourPassword
encoding: utf8
socket: /var/lib/mysql/mysql.sock //跟自己的my.cnf一致
由于redmine-0.9.3只支持ruby 1.8.6或ruby 1.8.7的版本,yum 安装的是ruby 1.8.5, 所以需要编译源代码安装,下载地址:http://rubyonrails.org/download 在此之前,需要安装GCC编译器。
然后安装rubygems,解压后进入当前目录执行 ruby setup.rb
数据库使用mysql,首先需要安装mysql,mysql-server,mysql-devel,然后需要 gem install mysql,ruby-mysql-2.9.2
安装subversion
yum安装,非常方便
在安装完subversion后,在var/www/svn目录下创建一个repos版本库,作为测试所用。
然后编辑/etc/httpd/conf.d/subversion.conf配置文件,如下:
LoadModule dav_svn_module modules/mod_dav_svn.so
DAV svn
SVNPath /var/www/svn
这样,你就可以通过Apache访问subversion版本库了,地址如下:http://yourIP/repos
使用Apache为subversion做出认证
首先需要下载Apache的mod_auth_mysql模块,在成功安装后重新启动Apache服务器会把该模块加载进来。
修改subversion.conf配置文件,如下:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
LoadModule mysql_auth_module modules/mod_auth_mysql.so
DAV svn
SVNParentPath /var/www/svn
AuthType Basic
AuthName Subversion
AuthMySQLHost localhost
AuthMYSQLEnable on
AuthMySQLPwEncryption sha1 //用户密码的加密类型
AuthMySQLUser redmine
AuthMySQLPassword yourPassword
AuthMySQLDB redmine
AuthMySQLUserTable svn_user
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd
AuthMySQLGroupTable svn_group
AuthMySQLGroupField user_group
Require valid-user
include /etc/httpd/conf.d/svn_htaccess/*.htaccess //导入控制所有版本库读写权限的配置文件
然后在针对redmine的数据库表创建两个视图
create view svn_user as SELECT users.login AS user_name, users.hashed_password AS user_passwd
FROM users
WHERE users.status =1
and users.type=’user’
create view svn_group as
select DISTINCT users.login as user_name,concat(projects.identifier,"_",roles.name) as user_group from
users,roles,projects,members,member_roles where
users.status=1 and
users.type = ‘user’ and
users.id=members.user_id and
members.id= member_roles.member_id and
projects.id =members.project_id
经过以上配置文件的修改及数据库视图的创建,重新启动Apache服务器,即可以通过Apache进行svn的安全认证。
对特定版本库读写权限的控制
对每一个版本库创建添加一个访问控制文件,如在/etc/httpd/conf.d/svn_htaccess下的.htaccess文件,
Require valid-user//所有的合法用户有读的权限
Require group edu_Developer //只有edu_Developer组有读写权限
重新启动Apache服务器后,管理人员可以控制repos1版本库的读写访问权限。同理可以扩展到其他的版本库。