织梦CMS - 轻松建站从此开始!

罗索

Linux平台下Subversion的安装与配置(二)

jackyhwei 发布于 2010-03-27 14:14 点击:次 
接第一篇,本篇中将着重介绍subversion与httpd结合使用时身份认证和授权相关的内容。
TAG:

接第一篇,本篇中将着重介绍subversion与httpd结合使用时身份认证和授权相关的内容。

6.生成身份认证文件
 
身份认证文件保存用户的用户名和密码,用于确定用户身份。
 
执行以下命令来生成身份认证文件,位于/home/svnroot/repository,文件名为pwdfile
htpasswd -m /home/svnroot/repository/pwdfile michael
New password: *******
Re-type new password: *******
 
htpasswd -cm /home/svnroot/repository/pwdfile harry
New password: *****
Re-type new password: *****
 
htpasswd -m /home/svnroot/repository/pwdfile sally
New password: *******
Re-type new password: *******
 
这样michael, harrysally这三个用户便被创建,其中-c表示创建身份认证文件-m则表示密码使用md5加密。
 
最后,不要忘记将pwdfile文件的所有者改为apache,并且将其权限设为700
 
7.创建授权文件
 
授权文件用于确定每个用户对特定目录的操作权限,格式可参考版本库下的conf/authzconf目录下的authz文件用于svnserve的授权,与我们所使用的mod_authz_svn的授权文件具有相同的格式)。因而我们可以直接把conf下的authz复制到我们想要的/home/svnroot/repository目录下,然后加以修改。
 
这里我么以给test项目分配权限说明subversion的授权机制,项目的目录结构如下图所示:
Repository
        |---test
        |      |---trunk
        |      |---branches
        |      |---tags
        |
        |---other projects…
 
其中,trunk表示主干,branches则为项目的分支,tags存放某个版本的快照。习惯上来说,大多数开发人的本地拷贝都来自truck目录,所以每个开发人员都应有trunk目录的读写权限,这样他们才能正常的进行日常的开发;而分支目录一般在,如某些开发人员需要大幅修改代码以增加新功能,或者代码进入较为稳定的阶段,开始bug去处工作等情况下使用,尽管这意味着这些代码总是有固定的一个或几个开发人员维护,但是基于“源代码共同拥有”的原则,我们还是可以将其设置为所有用户具有读写权限;tags目录则一般用于某个版本的发布,比如当项目到达版本1834时,release1已经完成,那么就可以将它复制到tags目录,作为一个快照存放,取一个好记得多的名字,比如release1(似乎应该只让某些人有写入权限,这样可以防止快照被破坏,可是即使被破坏了又怎么样呢,不要忘了我们在使用一个版本管理软件J)。
 
好吧,回过头来看看我们已经在身份验证文件中添加的用户,现在我们有michael, harrysally三个用户,其中michael是项目的pmharrysally则是开发人员,那么很明显了,我们需要建立两个用户组g_pmg_devmichael属于g_pm组,harrysally则属于g_dev组,分别授权。基于我们刚才的分析,g_pm组和g_dev组的用户都应该拥有对整个项目的读写权限,这也许太过简单了,不过正是我们目前的项目所需要的,什么时候需要一个复杂的授权方案,再修改authz文件也不迟。
 
根据authz文件的语法,我么可以把上述的设置表达成这样:(注意每个有效配置行的前面都不能有空格)
 
  [groups]                                                     //群组设置
   g_pm = micheal                                          //某群组里的成员
   g_dev = harry,sally
 
   [test:/]                                                      //仓库test的根目录的访问权限
   @g_pm = r                                                 //g_pm组用户具有读和写权限,’@’开头的表示群组设置
  @g_dev = r                                                //g_dev用户具有读写权限
 
   [test:/trunk]                                              //仓库testtrunk目录的访问权限
   @g_pm = rw                                               //g_pm组用户具有读和写权限,’@’开头的表示群组设置
  @g_dev = rw                                              //g_dev用户具有读写权限
 
   [test:/branches]                                        //仓库testbranches目录下的访问权限
   @g_pm = rw                                               //g_pm组用户具有读和写权限,’@’开头的表示群组设置
  @g_dev = rw                                              //g_dev用户具有读写权限
 
   [test:/tags]                                                //仓库testtags目录下的访问权限
   @g_pm = rw                                               //g_pm组用户具有读和写权限,’@’开头的表示群组设置
  @g_dev = rw                                              //g_dev用户具有读写权限
 
 
如果需要对某个用户授权,可以这么写:
   [test:/branches]                                        //仓库testbranches目录下的访问权限
   sally = r                                                      //sally用户具有读权限
 
当然,这样的authz文件显得很繁琐,而且没有必要,但是这样的配置在需求出现变化的时候将会很容易修改。
 
不要忘记将authz文件的所有者改为apache,并且将其权限设为700
 
 
8.修改Apache配置文件
 
执行vi /usr/local/apache2/conf/httpd.conf
确保以下两行已被subversion正确添加,这样apache才能正确加载module
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so
 
Version Control with Subversion 1.4以及很多howto上提到的
LoadModule dav_module modules/mod_dav.so
我们已经在编译httpd时链接进了核心中,不需要作为共享对象加载。
 
 
接着,在httpd.conf的最后添加以下内容(不包括后面的注释)
   <Location /svn>
   DAV svn
   SVNParentPath /home/svnroot/repository/                           //svn父目录
 
   AuthType Basic                                                                       //客户端认证机制
   AuthName "Subversion Repository"                                        //认证域名称
   AuthUserFile /home/svnroot/repository/pwdfile                   //身份认证文件 
 
   AuthzSVNAccessFile /home/svnroot/repository/authz         //权限配置文件
   Satisfy Any                                                                             //先尝试匿名访问
   Require valid-user                                                                   //仅通过验证的用户可访问版本库
   </Location>
 
其中/svn表示一个url的模式,匹配形如http://host/svnurlSVNParentPath 指定的目录下的所有项目都被subversion 认为是合法的版本库;AuthzSVNAccessFile为授权文件AuthType 则制定了客户端身份认证机制,Basic表示http基本认证机制;AuthUserFile就是先前创建的密码文件;Satisfy Any Require valid-user告诉apache所有用户先使用匿名方式访问版本库,只有当访问控制策略要求一个真实的用户名时,apache才会对客户端进行身份验证,这是使用得最多的一种授权方式。
 
最后,使用如下命令重启apache httpd,打开浏览器访问http://localhost/svn/test/这个URL便可访问版本库了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权限的目录。
/usr/local/apache2/bin/apachectl restart
 
至此,我们的版本库已经进行了正确的身份认证和授权配置,并且用户可以通过浏览器来查看当前的版本库的情况,subversion已经处于可用的状态。接下来的一篇中,我们将讨论使用subversion客户端相关的问题以及如何将subversion和apache httpd配置为系统服务。
Reference
1.        Subversion之路--实现精细的目录访问权限控制      郑新星
2.       Version Control with Subversion 1.4(r2730)    Ben Collins-Sussman, Brian W. Fitzpatrick, and C. Michael Pilato
3.       Apache HTTP Server Version 2.2文档中文版   Apache Software Foundation 金步国译
4.       Redhat9 Linux下安装,配置Subversion 1.3.1      Wooin http://blog.csdn.net/wooin/archive/2006/07/11/903974.aspx
(秩名)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201003/8880.html]
本文出处:网络博客 作者:秩名
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容