svn apache 安装 权限设置

来源:互联网 发布:数据产品经理书籍推荐 编辑:程序博客网 时间:2024/04/24 15:16

第一步,打开Apache安装目录下的httpd.conf文件

    找到下面的语句:

    #LoadModule dav_module modules/mod_dav.so

    将上面语句前面的#去掉

    第二步,在这句后面追加,如下语句:

    LoadModule dav_svn_module "{svn安装目录}/bin/mod_dav_svn.so"
    LoadModule authz_svn_module "{svn安装目录}//bin/mod_authz_svn.so"

    注:{svn安装目录}就是svn-win32-1.4.4.zip解压后你放的目录
{svn安装目录}下的
libdb44.dll
libeay32.dll
ssleay32.dll
libapr-1.dll
libaprutil-1.dll
libsvn_delta-1.dll
libsvn_fs-1.dll
libsvn_repos-1.dll
libsvn_subr-1.dll
文件拷贝到Apache的bin目录下

    第三步,在这个文件的最后,追加如下语句:

    <Location /svn>
        DAV svn
        SVNParentPath d:/svn
    </Location>

    第四步,创建仓库

    根据apache的配置文件的设置建立目录:d:/svn,然后用svnadmin create d:/svn/test命令创建仓库,命令执行成功之后,会在d:/svn/test下面生成很多的文件和目录。

    第五步,运行

    重新启动Apache Server
    在浏览器中输入网址:
    http://localhost/svn/test/
    这时候,看到页面显示:

    Revision 0: /
    Powered by Subversion version 1.3.2 (r19776).

    安装成功,接下来将进行权限设置。
另:
    将svn-win32-1.4.4/bin目录下的mod_dav_svn.so和mod_authz_svn.so复制到C:/Apache Group/Apache2/modules目录下。
    l        将svn-win32-1.4.4/bin目录下的所有DLL文件复制到C:/Apache Group/Apache2/bin目录下。注意在复制DLL文件时最好停掉Apache。
    l        用文本编辑器打开C:/Apache Group/Apache2/conf/httpd.conf文件找到以下两行
        #LoadModule dav_module modules/mod_dav.so
        #LoadModule dav_fs_module modules/mod_dav_fs.so
        去掉前面的#,然后所有LoadModule的后面添加下面两行
        LoadModule dav_svn_module modules/mod_dav_svn.so
        LoadModule authz_svn_module modules/mod_authz_svn.so
        然后重起Apache

    4.     建库
        假设所有库的根目录是F:/svn,并且要建一个名为testrepos的库,打开DOS窗口,进入到F:/svn目录下,然后输入svnadmin create f:/svn/testrepos
    命令执行完后f:/svn/testrepos目录下会生成一些目录和文件。然后在C:/Apache Group/Apache2/conf/httpd.conf文件的最后添加下面内容,并重起Apache
        <Location /svn>
        DAV svn
        SVNParentPath f:/svn
        </Location>

    5.     测试
    打开DOS窗口,进入一个临时目录F:/temp下
    svn co http://localhost/svn/testrepos
    正确执行后会显示"Checked out revision 0."的信息。

    6.     导入
    在一个临时文件夹(比如C:/temp)下建立如目录
    trunk
    branches
    tags
    在DOS命令行下进入C:/temp目录,然后执行
    svn import . http://localhost/svn/testrepos -m "Initial repository"
    执行成功的话会提示提交后的修订版本为1。

    7.     关于库的建立
    建议为会每一个项目建立一个库,例如:
    F:/svn/project1
    F:/svn/project2
    再为每个库建立如下结构(Subversion官方手册建议的目录结构)
    F:/svn/project1/trunk      这个目录用来存放正在进行开发的项目代码
    F:/svn/project1/branches   这个目录用来存放正在开发中的版本分支
    F:/svn/project1/tags       这个目录用来存放不再变动的分支
三、svn权限设置

    svn使用apache的权限管理对档案库及目录进行读写管理

    修改上面第三步的内容为:

    <Location /svn>
        DAV svn
        #SVNListParentPath on
        SVNParentPath d:/svn

        ### apache auth begin
        # how to authenticate a user
        AuthType Basic
        AuthName "Subversion repository"
        AuthUserFile D:/Subversion/apache_authz (保存用户名和密码,这个文件需要用Apache的htpasswd工具创建)
        Require valid-user
        ### apache auth end

        ### svn auth begin
        # our access control policy
        AuthzSVNAccessFile D:/Subversion/svn_authz  (保存用户访问的权限策略 可分组管理)
        # authentication if necessary
        #Satisfy Any
        ### svn auth end
    </Location>

    用htpasswd工具创建apache_authz 文件,

    建立保存用户名和密码的文件
                    密码的文件                  用户名
      htpasswd -cm  D:/Subversion/apache_authz  username1
    新建用户 htpasswd -m D:/Subversion/apache_authz new_username

    -c 表示创建文件,-m表示对密码用md5加密

    然后,会提示输入两次密码,以后再加用户就不需要用-c了,直接用-m即可。

    下面建立控制用户访问权限的文件svn_authz

    在D:/Subversion中新建一个记事本文件,输入下面的内容:

    [groups]
    test-developers = zxm
    everyone = @test-developers

    [test:/]                     //这表示,仓库test的根目录下的访问权限
    @test-developers = rw

    [test:/test]             //test仓库下test目录的访问权限
    @test-developers = rw         // 如果在前面加上@符号,则表示这是个群组权限设置

    r  表示读权限

    w 表示写权限

    好,配置完成,重新启动Apache server

    在浏览器地址栏中再次输入:http://localhost/svn/test/

    这次要输入密码才能进入,赶快试试吧。

other links:
http://www.cnblogs.com/iaxes/articles/43184.html
http://alexclark.itpub.net/post/670/5647

Apache Http Server服务启动svnserve模块权限配置说明

1. Apache 提供了基本的全局粒度权限设置:

* 首先需要创建一个用户文件。Apache 提供了一个工具 htpasswd,用于生成用户文件,可以在 Apache 的安装目录下找到。具体使用方法如下:
htpasswd etc/svn/passwordfile username
如果 passwordfile 不存在,可以加上 -c 选项让 htpasswd 新建一个。创建好的文件内容是用户名加上密码的 MD5 密文。
* 接下来修改 httpd.conf,在 Location 标签中加入如下内容:

Java代码 复制代码

   1. AuthType Basic    
   2. AuthName "svn repos"    
   3. AuthUserFile /etc/svn/passwordfile    
   4. Require valid-user  

AuthType Basic 
AuthName "svn repos" 
AuthUserFile /etc/svn/passwordfile 
Require valid-user



重新启动 Apache, 打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了。
现在只有 passwordfile 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 “Require valid-user” 为 “Require user tony robert” 将只有 tony 和 robert 可以访问该版本库。
有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如:

Java代码 复制代码

   1. <LIMITEXCEPT REPORT OPTIONS PROPFIND GET>    
   2. require valid-user    
   3. </LIMITEXCEPT>  

<LIMITEXCEPT REPORT OPTIONS PROPFIND GET> 
require valid-user 
</LIMITEXCEPT>



如上配置将使匿名用户有读取权限,而限制只有 passwordfile 中配置的用户可以使用写操作。

2. 目录粒度权限访问设置:

使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。

首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,找到

Java代码 复制代码

   1. LoadModule dav_svn_module modules/mod_dav_svn.so  

LoadModule dav_svn_module modules/mod_dav_svn.so

在其后面加上
Java代码 复制代码

   1. LoadModule authz_svn_module modules/mod_authz_svn.so 

LoadModule authz_svn_module modules/mod_authz_svn.so

  

现在可以在 Location 标签中使用 authz 的功能了。一个基本的 authz 配置如下:

Java代码 复制代码

   1. <LOCATION repos>    
   2. DAV svn    
   3. SVNPath /etc/svn/repos    
   4. AuthType Basic    
   5. AuthName "svn repos"    
   6. AuthUserFile /etc/svn/passwd    
   7. AuthzSVNAccessFile /etc/svn/accesspolicy    
   8. Satisfy Any    
   9. Require valid-user    
  10. </LOCATION> 

<LOCATION repos> 
DAV svn 
SVNPath /etc/svn/repos 
AuthType Basic 
AuthName "svn repos" 
AuthUserFile /etc/svn/passwd 
AuthzSVNAccessFile /etc/svn/accesspolicy 
Satisfy Any 
Require valid-user 
</LOCATION>



其中AuthUserFile和AuthzSVNAccessFile两个文件就是指向3章节中的 passwd和authz策略文件 指向的是 authz 的策略文件

使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中 tony 将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法:

Java代码 复制代码

   1. [groups]    
   2. 02 project1_committers = paulex richard    
   3. project2_committers = jimmy michel spark sean /    
   4.            steven tony robert    
   5. [repos1:/]    
   6. * = r    
   7. @ project1_committer = rw    
   8. [repos2:/]    
   9. * = r    
  10. @ project2_committer = rw  

[groups] 
02 project1_committers = paulex richard 
project2_committers = jimmy michel spark sean / 
          steven tony robert 
[repos1:/] 
* = r 
@ project1_committer = rw 
[repos2:/] 
* = r 
@ project2_committer = rw


这样项目1的 committer 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2,同样项目2的 commiter 也不能修改 repos1 版本库的文件。

原创粉丝点击