使用apache、mod_dav_svn和mod_perl管理版本库的访问权限

概述

在此篇说明中,我们将配置apache使其通过mod_perl来进行访问控制。使用apache2和mysql及postgresql测试通过,但对所有可以提供perl DBD模块的数据库来说应该都可以使用。

您需要Redmine的r860以上版本。如果您的Redmine版本低于r916,需要下载 Redmine.pm

您的SVN服务器上需要安装apache,并安装以下模块:mod_dav_svn, mod_perl2, DBI 和 DBD::mysql (或者您所使用的数据库的DBD驱动)

在Debian/ubuntu上,您必须执行:

aptitude install libapache2-svn libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl

启用apache模块

在Debian/ubuntu上:

a2enmod dav
a2enmod dav_svn
a2enmod perl

Apache配置

您需要将 "Redmine.pm" 复制到SVN服务器上,并在apache配置文件(例如 /etc/APACHE_DIR/conf.d/ )中添加一些参数。

您必须将下列参数中的 Redmine.pm 的路径和数据库信息修改为与实际一致:

PerlRequire /usr/local/apache/Redmine.pm
<Location /svn>
  DAV svn
  SVNParentPath "/var/svn" 

  AuthType Basic
  AuthName redmine
  Require valid-user

  PerlAccessHandler Apache::Authn::Redmine::access_handler
  PerlAuthenHandler Apache::Authn::Redmine::authen_handler

  ## for mysql
  PerlSetVar dsn DBI:mysql:database=databasename;host=my.db.server
  ## for postgres
  # PerlSetVar dsn DBI:Pg:dbname=databasename;host=my.db.server

  PerlSetVar db_user redmine
  PerlSetVar db_pass password
</Location>

# a private location in read only mode to allow Redmine browsing
<Location /svn-private>
  DAV svn
  SVNParentPath "/var/svn" 
  Order deny,allow
  Deny from all
  # only allow reading orders
  <Limit GET PROPFIND OPTIONS REPORT>
    Allow from redmine.server.ip
  </Limit>
</Location>

这将添加2个Location参数,一个是 svn (同时配置了使用Redmine数据库中的用户信息进行认证和访问控制的参数),另一个是 svn-private (只读并通过IP限制只允许Redmine的浏览)

这样配置就完成了,您可以试着浏览一些项目的版本库,例如:

svn ls http://my.svn.server/svn/myproject

如果你访问的是非公开项目的版本库,将需要输入密码。

Also available in: HTML TXT