分类: Python/Ruby
2011-10-27 09:36:22
九 权限控制
在SVN的使用中,存在“认证”、“授权”两个概念。认证,即authentication,是指用户名与密码的认证。授权,即authorization,是指审核某用户对某个目录是否具备读写权限。这两者的配合作用,组成了SVN的整个账户管理体系。
在SVN权限控制上,有多种选择。一般来说,是采用Windows网域账户验证和SVN自身的权限管理。现简要介绍如下。
1 SVN自身权限的管理(basic 访问控制)
a) 修改
DAV svn
SVNParentPath D:/svn
AuthName "Lota SVN repository"
AuthType Basic
AuthzSVNAccessFile "d:/svn/repository/conf/authz" # 授权文件
AuthUserFile passwd #密码文件
Require valid-user
Satisfy Any
其中,AuthzSVNAccessFile指定版本库访问策略,Require valid-use表示只有经过认证的用户才可以访问,AuthUserFile用来表示使用htpasswd创建的密码文件的位置。
如果想用不同的访问政策文件和密码文件控制不同的版本库,可以在httpd.conf中写多个
b) 生成passwd文件。在cmd控制台中,切换到
bin\htpasswd –cm passwd
bin\htpasswd –m passwd
可在
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 prom
-D Delete the specified user.
On Windows, NetWare and TPF systems the '-m' flag is used by
On all other systems, the '-p' flag will probably not work.
c) 配置版本库访问策略文件
AuthzSVNAccessFile 对应的文件就是控制版本库的访问策略(假设SVN版本库下面有trunk,branches,tags三个目录),如:
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
manager =user1,user2
dev = user3,user4
[/]
*=r
[repository:/trunk]
@ manager =rw
@ dev =r
*=
[repository:/branches]
@ manager = rw
@ dev =rw
*=
[repository:/tags]
@ manager = rw
@ dev = rw
*=rw
小节名称中冒号前面的版本库名称不能轻易省略,省略则代表针对所有文件库。*代表所有用户,等号后面为空则表示没有权限。
在访问策略文件中,即可为单个用户定义访问权限,也可以为用户组定义访问权限。如例子中的[groups]目录。
d) 用户远程修改自己的SVN密码。管理员分配用户后,可以让用户自己远程修改密码。到站点下载Apache22Passwd.rar,将其中的passwd.cgi及passwd.cgi.ini复制到
auth_user_file=C:\Program Files\Apache Software Foundation\Apache2.2\passwd
这样,用户就可以访问修改密码。
2 SSPI 认证访问控制(windows 网域认证)
a) SSPI认证方式是基于Apache的mod_auth_sspi模块的,因此,首先需要下载mod_auth_sspi模块(注意有版本对应关系)。
b) 解压mode_auth_sspi压缩包,将\bin目录下的mod_auth_sspi.so复制到
c) 编辑
LoadModule sspi_auth_module modules/mod_auth_sspi.so
如果有下面auth_module这行,mod_auth_sspi需要放在其前面
LoadModule auth_module modules/mod_auth.so
d) 修改httpd.conf的
DAV svn
SVNParentPath d:/svn
AuthName "Lota SVN Repository"
AuthzSVNAccessFile "d:/svn/repository/conf/authz"
Require valid-user
Satisfy Any
# The following is SSPI authentication setting
AuthType SSPI
SSPIAuth On
SSPIAuthoritative On
SSPIDomain ltass.lota.com
SSPIOfferBasic On
e) 设置访问授权
与Basic授权方式类似,在[Groups]下添加域内的用户,然后再给予授权。例子如下:
[groups]
manager = huangqx
dev = zhangt,huangqx
[/] # 表示可以访问版本库下所有文件
@ manager= rw
3 权限控制的一些说明
从上述分析可以看出,要实现SVN的权限控制,首先得确定版本库的布局,在SVN中,可以针对每一个版本库设置不同的访问策略。并通过对用户进行分组,然后对每个用户组进行基于路径粒度权限的授权。
实际应用中,常常要设置默认的访问权限。在SVN1.5中,如果对一个目录没有设置访问控制,则默认拥有父目录权限的用户可以进行访问。
同时,SVN的权限具有继承性,也就是说,有父目录权限的用户也可以访问子目录,当然,前提是子目录设置了默认的访问策略。
十、配置邮件通知
1、安装ActivePerl
到ActivePerl官网下载ActivePerl,一路Next即可。安装后,查看是否已经设置了环境变量,如果没有,则添加Path=C:\Perl\bin;C:\Perl\site\bin
2、安装nmake
复制nmake15.exe到Windows\system32目录下,同时改名为nmake.exe。在cmd 控制台上输入nmake可测试是否安装成功。
3、安装Module::Build
解压Module-Build-0.31.tar.gz,并在cmd控制台上cd到解压后的目录,依次运行一下命令
Perl Build.PL
Build
Build test
Build install
4、安装Authen::SASL
解压Authen-SASL-2.10.tar.gz,在cmd控制台上,cd到解压后的目录,依次运行以下命令。
Perl Makefile.pl
Nmake test
nmake install
5、安装Net::SMTP_auth
解压Net-SMTP_auth-0.08.tar.gz,在cmd控制台上,cd到解压后的目录,依次运行以下命令。
Perl Makefile.pl
Nmake test
nmake install
6、安装SVN::Notify
解压SVN-Notify-2.78.tar.gz,在cmd控制台上,cd到解压后的目录,依次运行以下命令。
Perl Build.pl
Build
Build test
Build install
安装完后,在cmd控制台上输入svnnotify测试是否安装成功。
7、配置邮件自动通知
SVN配置邮件自动通知的功能是利用“钩子”来实现的。加入版本库在D:\SVN,进入我们所建立的版本库,在hooks文件夹找到post-commit.tmpl,并复制为post-commit.bat,对其进行编辑,去掉最后几行的配置,并添加以下内容
set REPOS=%1
set REV=%2
SET PATH=C:\PERL\SITE\BIN;C:\Program Files\Subversion\bin;C:\PERL\BIN;
SET OS=Windows_NT
SET SystemRoot=C:\WINDOWS
svnnotify --repos-path %REPOS% -r %REV% --to myname@company.com --smtp 192.168.30.20 --from myname@company.com -c GBK -H HTML::ColorDiff -d -c GBK
其中—to 选项是接收邮件的人,可以是单个用户,也可以是邮件组。