tedwhy 发表于 2017-1-14 11:46:01

Subversion权限配置的一些参考(纯svn和基于apache)

  安全和权限
-          对于以svnserve -d启动的服务器,修改代码库目录/conf/svnserve.conf,主要步骤:(在配置文件中,变量前不要有空格。)
1)        对于svnserve.conf,注意段,其中4项的主要含义:
Ø         anon-access 定义匿名用户的权限(write,read,none)。
Ø         auth-access 定义认证过用户的权限(write,read,none)
Ø         password-db 定义用户密码列表文件名
Ø         realm 一般是版本库的uuid。如果有2个版本库的这个属性一样,那么password-db的值也必须一样。反之亦然。
2)        定义用户密码列表文件内容,格式:

    用户名=密码,注意这个是大小写敏感的。
3)        启动服务器,在提示用户输入安全信息时,缺省是用户的OS的登录名,此时直接提示输入密码。如果密码不对,则会提示输入用户名,然后是密码。
例子:
svnserve.conf

### 禁止匿名用户访问

anon-access = none
### 验证过的用户具有读写权限

auth-access = write
### 定义用户密码列表文件名文件名为userlist.txt

password-db = userlist.txt
### 定义realm

realm = My First Repository
用户密码列表文件名
(userlist.txt)

foxgem1=foxgem1
对于这种方式,无法定义对于代码库下具体目录的权限。如果有这个需要,那么可以采用与Apache2集成的方式解决。
-          对于与Apache2集成的服务器,修改httpd.conf,主要步骤:(需要在Apache2中配置mod_authz_svn,建议先安装Apache2,再安装Subversion。此处主要是利用Apache2对于目录的访问控制,可以从Apache2的手册中获得更多的信息。)
1)        使用htpasswd建立userlist。如果文件不存在,那么使用htpasswd -cm;文件存在,则使用htpasswd -m。其中c代表create;m代表使用MD5加密口令。如:
   $ ### First time: use -c to create the file
   $ ### Use -m to use MD5 encryption of the password, which is more secure
   $ htpasswd -cm /etc/svn-auth-file harry
    New password: *****
    Re-type new password: *****
    Adding password for user harry
   $ htpasswd /etc/svn-auth-file -m sally
    New password: *******
    Re-type new password: *******
    Adding password for user sally
2)        在httpd.conf中的<location>,2种使用方式:
Ø         只允许指定用户
    <Location /svn>
       DAV svn
       SVNParentPath /usr/local/svn
       AuthType Basic

       AuthName "Subversion repository"
       AuthUserFile /etc/svn-auth-file
       Require valid-user
    </Location>
Ø         对于指定操作之外的用户,应用权限认证
    <Location /svn>
       DAV svn
       SVNParentPath /usr/local/svn
       AuthType Basic

       AuthName "Subversion repository"
       AuthUserFile /path/to/users/file
       # 对于get操作之外,需要验证。

       <LimitExcept GET PROPFIND OPTIONS REPORT>
          Require valid-user
       </LimitExcept>
    </Location>
3)        以上2步建立了和svnserve -d相同的访问控制。如果要应用目录控制,那么:
a)         建立目录访问策略文件,文件格式与svnserve.conf的语法类似。对于每个要控制的路径:

username= (r,rw)
如果没有提及用户,那么就没权限;如果指明用户,但是等号右边什么也不写,即是显式的拒绝。如果左边使用*,则表示所有的用户。对于使用了SVNParentPath,需要指明repos-name。否则,可以省略。在文件中还可以使用建立组,例子:

calc-developers = harry, sally, joe
paint-developers = frank, sally, jane
everyone = harry, sally, joe, frank, sally, jane

   

###使用时注意,组名前有@。
@calc-developers = rw

@paint-developers = rw
jane = r
b)        在<location>中使用AuthzSVNAccessFile,典型的3种配置方式:
方式一:允许匿名存取
<Location /repos>
       DAV svn
       SVNParentPath /usr/local/svn
       AuthzSVNAccessFile /path/to/access/file

    </Location>
方式二:不允许匿名存储

    <Location /repos>
       DAV svn
       SVNParentPath /usr/local/svn
       AuthzSVNAccessFile /path/to/access/file

       # 只有认证用户可以存取

       Require valid-user
       # 认证方式

       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /path/to/users/file
    </Location>
方式三:方式1和2的混合模式

<Location /repos>
       DAV svn
       SVNParentPath /usr/local/svn
       AuthzSVNAccessFile /path/to/access/file

       # 先尝试匿名,如果不行再尝试认证用户

       Satisfy Any
       Require valid-user
       # 认证方式

       AuthType Basic
       AuthName "Subversion repository"
       AuthUserFile /path/to/users/file
    </Location>
例子:
httpd.conf
<Location /repo>
    DAV svn
    svnpath D:/studycases/subversion/repository
    AuthzSVNAccessFile D:/studycases/subversion/pathright.txt
    Satisfy Any
    Require valid-user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile D:/studycases/subversion/svnuser.txt
</Location>
用户密码列表文件名
(svnuser.txt)
foxgem:$apr1$kY/…..$rXDeLPlm9b0uacF7zM.dl.
(注意这是使用htpasswd产生的)

目录访问策略文件
(pathright.txt)


foxgem= r

foxgem=rw
页: [1]
查看完整版本: Subversion权限配置的一些参考(纯svn和基于apache)