Subversion安全设置

关于如何安装Subversion以及与Apache集成的问题,请参看《集成Subversion与Apache》,本文是在此基础上对安全作一些设置。

1 准备

在安装之前,首先检查一下,httpd.conf中是否加载了必须的组件。
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
以及相关的版本库的配置:

	DAV svn
	SVNParentPath C:\svn

如果是这样配置的,那么默认情况下,此版本库对全世界都是可以“匿名”访问的,换句话说,任何人可以使用Subversion客户端从版本库URL取出一个工作拷贝(或是它的子目录),任何人可以在浏览器输入版本库URL交互浏览的方式来查看版本库的最新修订版本,并且可以提交到版本库。这样当然不好,需要配置一些认证授权策略,来阻止非法人员的进入和更好的跟踪管理版本库。

2 配置

2.1) 认证选项

Apache提供了两种认证选项。 1) 基本HTTP认证 最简单的客户端认证方式是通过HTTP基本认证机制,简单的使用用户名和密码来验证用户的身份,Apache提供了一个htpasswd工具来管理可接受的用户名和密码,也就是希望赋予Subversion特别权限的用户,首先需要将他们添加到密码文件。 我们先了解一下htpasswd工具的使用,该工具在Apache的安装目录下的bin中。
>cd C:\Program Files\Apache Group\Apache2\bin
>htpasswd
Usage:
        htpasswd [-cmdpsD] passwordfile username
        htpasswd -b[cmdpsD] passwordfile username password

        htpasswd -n[mdps] username
        htpasswd -nb[mdps] username password
 -c  Create a new file.
 -n  Don't update file; display results on stdout.
 -m  Force MD5 encryption of the password (default).
 -d  Force CRYPT encryption of the password.
 -p  Do not encrypt the password (plaintext).
 -s  Force SHA encryption of the password.
 -b  Use the password from the command line rather than prompting for it.
 -D  Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by default.
On all other systems, the '-p' flag will probably not work.
选项c是创建新文件,如果是第一次使用或文件不存在,则打开此选项。选项m是使用MD5加密密码,s是使用SHA来加密,D则是删除某个用户。了解用法之后,开始创建密码文件。这里以rain用户为例,密码文件存放在C:\svn\auth\svn-auth.conf中。
>htpasswd -cm /svn/auth/svn-auth.conf rain
New password: ****
Re-type new password: ****
Adding password for user rain
接下来,我们需要在httpd.conf的Location里添加一些指示来告诉Apache如何来使用这些密码文件。

	DAV svn
	SVNParentPath C:\svn

	AuthType Basic
	AuthName "Subversion repository"
	AuthUserFile C:\svn\auth\svn-auth.conf

到这一步,并没有完成,Apache只是知道当需要授权时需要向客户端索取用户名和密码,而并没有告诉它什么样的客户端需要授权。最简单的方式是保护所有的请求,添加Require valid-user告诉Apache任何请求都需要认证。

	DAV svn
	SVNParentPath C:\svn

	AuthType Basic
	AuthName "Subversion repository"
	AuthUserFile C:\svn\auth\svn-auth.conf
	Require valid-user

2) SSL证书管理 关于SSL的配置,请参看Apache文档或者其他书籍。

2.2) 授权选项

在C:\svn\auth下建立文件svn-access.conf。文件内容大体如下格式:
[repos-name:path]
user = r|w|rw
r为只读,w为只写,rw则为可读可写。 如果你想混合认证/匿名访问,则可以这样配置:

	DAV svn
	SVNListParentPath on
	
	SVNParentPath C:\svn

	AuthzSVNAccessFile C:\svn\auth\svn-access.conf

	Satisfy Any
	Require valid-user

	AuthType Basic
	AuthName "Subversion repository"
	AuthUserFile C:\svn\auth\svn-auth.conf

在svn-access.conf配置如下:
[/]
* = r

[/]
rain = rw

[rose:/branches/BR_1]
michael = r
对于上面的配置,则说明了对于所有用户默认是可读的,rain用户可以读写所有目录,而michael对于rose目录下的branches/BR_1子目录只具有只读权限。对于实际项目,可以做相应修改。

3 参看资料

1) http://subversion.tigris.org 2) http://svnbook.red-bean.com/ 分享家:Addthis中国

Leave a Reply





◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。