subversion svnserver服务启动与配置

svnserve 是一个轻量级的服务, 使用自定义的协议通过TCP/IP与客户端通讯。
客户端通过由 svn:// 或者 svn+ssh:// 开始的URL访问svnserve服务器。

启动服务器

端口监控(inetd)模式

如果你打算用端口监控来启动处理客户的访问请求的进程,你可以通过传入参数-i来启动:

svnserve -i

当使用-i参数启动服务的时候,svnserve通过stdin和stdout用自定义协议和客户端
通讯。同时服务侦听3690端口。

独立端口监控进程

使用参数-d启动服务作为一个独立的端口监控进程。

svnserve -d

当运行svnserve在独立端口监控模式时,你可以使用--listen-port=和--listen-host=参数来自定义需要的端口和主机名称。当前模式默认的端口是3690。

当然,也有第三种方法启动svnserve,也就是使用“隧道模式”,使用-t参数启动服务。这个模式要求远程服务程序,如RSH或SSH,已经成 功验证用户,并且使用已经校验的用户启动一个属于该用户的svnserve进程。当使用该模式提供服务时,要确认启动的用户帐户具备对 Repository的读/写权限。

设置项目目录

当svnserve开始运行时,它将会暴露所有的Repository到网络上。不过,当客户端需要获取一个Repository的内容时,需要指定Reopsitory的绝对路径。例如:一个Repository放在文件路径
C:/Project Repository/Project1
那么当客户端访问时,需要指定绝对路径:
svn://host/C:/Project Repository/Project1
所以,为了增加保密性,你可以使用参数-r指定需要暴露的Repository的路径,当用户访问时,只需指定Repository的名称即可。例如上面的Repository,当启动服务时,使用如下的方法:
svnserve -d -r C:/Project Repository
那么当客户端访问时,则使用
svn://host/Project1
就可以获取数据了。

内置的验证和授权

当客户端连接到一个svnserve进程时,下面的流程就会触发:
1、客户选择一个指定的Repository;
2、服务处理Repository的配置文件 conf/svnserve.conf文件,并且开始执行在其中定义的所有验证和授权策略;
3、依赖与情形和授权策略:
 a)客户端也许允许匿名访问而不需要验证,或者
 b)客户但也许需要在任何时候被要求验证,或者
 c)假如处于"隧道模式"中,客户端将声明自己已经可以被外部验证。

很显然,如上所说,用户文件是一个名为svnserve.conf的,放在conf目录下的文件。
现在我们来看看如何配置这个文件:
这个配置文件放置在Repository的目录中的conf目录下,它有两个节点:
[general]
[users]
其中,[general]的配置信息有:
anon-access = read
auth-access = write
其中表示对于验证有效的以及没通过验证的用户可以做什么事情。分别有read, write和none

[users]的标签的配置内容有:
USERNAME = PASSWORD
password-db = passwd
realm = My First Repository
其 中表示,用户名对应的密码是什么,或者指定一个存储用户名和密码的文件的相对或绝对路径以及指定了Repository的验证领域。如果两个 Repository有相同的验证领域,那么它们应该有相同的密码数据库,反之亦然。默认的领域就是指向当前的Repository的路径,与服务器的 Repository的根目录相关。

svnser配置实例
svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。

svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限。


1) svnserve配置文件概述

svnserve配置文件通常由以下3个文本文件组成:
svn服务配置文件,该文件版本库目录的conf目录下,文件名为svnserve.conf。
用户名口令文件,该文件名在文件svnserve.conf中指定,缺省为同目录下的passwd。
权限配置文件,该文件名也在文件svnserve.conf中指定,缺省为同目录下的authz。

2) svn服务配置文件

svn服务配置文件为版本库目录中的文件conf/svnserve.conf。该文件仅由一个[general]配置段组成。

[general]配置段中配置行格式如下:
<配置项> = <值>

配置项分为以下5项:

anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:read

auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。
即"write"为可读可写,"read"为只读,"none"表示无访问权限。
缺省值:write

password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf
目录的相对路径。
缺省值:passwd

authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。
除非指定绝对路径,否则文件位置为相对conf目录的相对路径。
缺省值:authz

realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的
认证域相同,建议使用相同的用户名口令数据文件。
缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。

【说明】版本库认证域
在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下:
[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: 0d545a49-4038-0410-99b4-c66dc73f754e
Password for 'root':
在上述第2行"Authentication realm: "之后显示的字符串为认证域名称。如果在配置文件中为设定认证域,就会提示一个UUID,如上述所示。
如果在配置文件中指定了如下配置项:
realm = test
将在svn客户端提示如下:
[root@test root]# svn list svn://192.168.3.45/test
Authentication realm: test
Password for 'root':

例1:svn服务配置文件conf/svnserve.conf的内容如下:
[general]
anon-access = none
auth-access = write
password-db = ../../conf/passwd
authz-db = ../../conf/authz
realm = test

上 述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件"../../conf /passwd";权限配置文件为相对版本库conf目录的文件"../../conf/authz";版本库的认证域为"test"。

3) 用户名口令文件

用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。该文件仅由一个[users]配置段组成。

[users]配置段的配置行格式如下:
<用户名> = <口令>
注意:配置行中的口令为未经过任何处理的明文。

例2:用户名口令文件conf/passwd的内容如下:
[users]
admin = admin
thinker = 123456

该文件中配置了两个用户,用户名分别为"admin"和"thinker"。其中"admin"用户的口令为"admin";"thinker"用户的口令为"123456"。

4) 权限配置文件

权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。

[groups]配置段中配置行格式如下:
<用户组> = <用户列表>
用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"(如:引用用户组"all"要使用字符串"@all")。

版本库路径权限段的段名格式如下:
[<版本库名>:<路径>]
如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。
可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:段名为"[/tmp]"的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录"/tmp"的访问权限。

版本库路径权限段中配置行格式有如下三种:
<用户名> = <权限>
<用户组> = <权限>
* = <权限>
其中,"*"表示任何用户;权限的取值范围为''、'r'和'rw',''表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。
注意:每行配置只能配置单个用户或用户组。

例3:权限配置文件conf/authz的内容如下:
[groups]
g_admin = admin,thinker

[admintools:/]
@g_admin = rw
* =

[test:/home/thinker]
thinker = rw
* = r

在 上述配置文件中,定义了一个用户组"g_admin",该用户组包含用户"admin"和"thinker"。然后定义了2个版本库路径权限段。其中,版 本库"admintools"只有用户组"g_admin"可读写,其他用户无任何权限;版本库"test"中路径"/home/thinker"只有用 户"thinker"有读写权限,其他用户只有可读权限。

5) 总结

在本文中,详细介绍了svnserve程序的3个配置文件。SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。
需要强调的是本文介绍的配置文件只对svnserve服务有效,即客户端通过前缀为svn://或svn+ssh://的URL访问版本库有效,而对通过前缀http://、https://或file:///的URL无效。


6)、总结与提高

错误搞定后,接下来就是比较轻松但乏味的事情了,创建公司员工一大堆成员的用户名和密码。

 

比较重要的三个配置文件:

passwd: 用户名和密码存放位置。

auth.conf: 每个用户授予权限。

svnserve.conf: SVN的配置文件

 

先说这三个文件的位置:

在创建仓库时,其目录下有一个名为conf的文件夹,下面有authz, passwd, svnserve.conf三个文件,由于上面是Apache+SVN的方式,所以不使用其下面的authz和passwd,只使用svnserve.conf。

 

而实际使用的auth.conf和passwd是在添加用户和权限分配时创建并指定其位置。

passwd在上面第6步(1,创建用户)指定。passwd是自动生成的,无需手动改动。

auth.conf在上面第6步(2,权限分配)创建。auth.conf需手动添加内容。

注:上面第5步引用了其位置,所以需第5步与之保持一致。

 

下面对实际使用的三个配置文件稍作讲解:

1,passwd

是由Apache命令创建后自动生成的,不要直接改动。

 

2,auth.conf

给每个用户授予权限。详细解释,可能会因人而异,但本质上大同小异。

[groups] /*这个表示群组设置

Admin=usr1,user2 /*这个表示admin群组里的成员user1,user2

Develop=u1, u2 /*这个表示Develop群组里的成员 u1,u2

 

[www:/] /*这表示,仓库www的根目录下的访问权限

user1 = rw /*www仓库user1用户具有读和写权限

user2 = r /* www仓库userl用户具只有读权限

 

@develop=rw /*这表示 群 develop的成员都具有读写权限

[/] /*这个表示在所有仓库的根目录下

* = r /*这个表示对所有的用户都具有读权限

 

3,svnserve.conf

(注:第一次配置时,直接按最下面的例子,去掉注释就ok了)

每个代码仓库都有一个 svnserve.conf 文件来控制 svnserve 守护进程的行为。这个文件位于仓库的 conf 子目录。文件的结构与 Subversion 用户配置文件的结构类似。顶层是段落 (section),以方括号中的词指定;每个段落之中是 ``variable=value'' 形式的变量定义。以 `#' 开头的行被忽略。svnserve.conf 当前只使用一个段落,称为 ``general'',并且支持如下变量:

 

anon-access = none|read|write

    决定非授权用户的访问级别。write访问允许所有的仓库操作。read 访问允许所有操作,除了提交和修改版本属性。none 不允许任何访问。默认级别是 read。

 

auth-access = none|read|write

    决定授权用户的访问级别,使用与上面相同的访问级别。默认级别是 write。

 

password-db = filename

    设置密码数据库的位置。filename可能是相对仓库中 conf 目录的位置。没有默认值。密码数据库的格式与本文件相似。它只有一个段落 ``users'';段落中的每个变量是一个用户名,每个值是一个密码。

 

realm = realm-name

    设置仓库的授权域(realm)。如果两个仓库拥有相同的密码数据库,它们应当在同一个域中,反之亦然;这样的关联可以允许客户端为多个仓库使用单一的密码缓存。默认域的值是仓库的路径,相对于服务器进程的虚根目录。

 

例子:

[general]
anon-access = none
auth-access = write
password-db = /svn/passwd
authz-db = /svn/auth.conf
realm = My First Repository

上述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件"/svn/passwd ";权限配置文件为相对版本库conf目录的文件"/svn/auth.conf";版本库的认证域为"My First Repository"。

 

最后附注:

<Location /svn>

DAV svn

SVNParentPath /svn/project         (此处配置你的版本库根目录)

AuthType Basic                  (连接类型设置 基本验证)

AuthName "Hello welcome to here"  (此处字符串内容修改为提示对话框标题)

AuthUserFile /svn/passwd (此处修改为访问版本库用户的文件,用apache 的htpasswd命令生成)

AuthzSVNAccessFile /svn/auth.conf  (此处修改为访问版本库权限的文件)

Require valid-user                ("Requirevalid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库)

</Location>


 

官方参数说明

svnserve
当对远程源版本库使用svnsync时,使用Subversion的自定义网络协议。

svnserve允许Subversion版本库使用svn网络协议,你可以作为独立服务器进程运行svnserve,或者是使用其它进程,如inetd、xinetd(也是svn://)或使用svn+ssh://访问方法的sshd为你启动进程。

一 旦客户端已经选择了一个版本库来传递它的URL,svnserve会读取版本库目录的conf/svnserve.conf文件,来检测版本库特定的设 置,如使用哪个认证数据库和应用怎样的授权策略。关于svnserve.conf文件的详情见“svnserve,一个自定义的服务器”一节。

svnserve选项
不象前面描述的例子,svnserve没有子命令—svnserve完全通过选项控制。

--daemon (-d)
导致svnserve以守护进程方式运行,svnserve维护本身并且接受和服务svn端口(缺省3690)的TCP/IP连接。

--listen-port=PORT
在守护进程模式时导致svnserve监听PORT端口。(FreeBSD守护进程缺省只监听tcp6—这个选项告诉他们监听tcp4。)

--listen-host=HOST
svnserve监听的HOST,可能是一个主机名或是一个IP地址。

--foreground
当与-d一起使用,会导致svnserve停留在前台,主要用来调试。

--inetd (-i)
导致svnserve使用标准输出/标准输入文件描述符,更准确的是使用inetd作为守护进程。

--help (-h)
显示有用的摘要和选项。

--version
显示版本信息,版本库后端存在和可用的模块列表。

--root=ROOT (-r=ROOT)
设置svnserve服务的版本库的虚拟根,客户端提供的URL中显示的路径会解释为这个根的相对路径,不会允许离开这个根。

--tunnel (-t)
导 致svnserve以管道模式运行,很像inetd操作的模式(两种模式都维护标准输入/标准输出的连接),除了连接是用当前uid的用户名预先认证过的 这一点。这个选项在客户端使用如ssh之类的管道时自动传递,这意味着你很少有必要再去传递这个参数给svnserve,所以如果你发现在命令行输入了 svnserve --tunnel,并想知道接下来怎么做,可以看“SSH 隧道”一节。

--tunnel-user NAME
与--tunnel选项结合使用;告诉svnserve假定NAME就是认证用户,而不是svnserve进程的UID用户,当希望多个用户通过SSH共享同一个系统帐户,但是维护各自的提交标示符时非常有用。

--threads (-T)
当以守护进程模式运行,导致svnserve为每个连接产生一个线程而不是一个进程,svnserve进程本身在启动后会一直在后台。

--listen-once (-X)
导致svnserve在svn端口接受一个连接,维护完成它退出。这个选项主要用来调试。

转载于:https://www.cnblogs.com/YHM07/p/4116724.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb地理空间索引原理阅读摘要

http://www.cnblogs.com/taoweiji/p/3710495.html 具体原理在上面 简单概述&#xff0c;&#xff08;x,y&#xff09;经纬度坐标&#xff0c;通过geohash的方式&#xff0c;通过N次方块四分割生成一个坐标码&#xff0c;然后用坐标码进行BTREE的索引建立转载于:https://www.cnb…

angular 页面加载时可以调用 函数处理

转载于 作者:海底苍鹰地址:http://blog.51yip.com/jsjquery/1599.html 我希望页面加载的时候&#xff0c;我能马上处理页面的数据&#xff0c;如请求API .... 所以这样设置 在某个页面的控制器中 监听页面load phonecatControllers.controller(registerctr, [$scope, $routePa…

删除排序数组中的重复项

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2…

android 处理鼠标滚轮事件 【转】

android处理鼠标滚轮事件&#xff0c;并不是如下函数&#xff1a; 1&#xff09; public boolean onKeyDown(int keyCode, KeyEvent event) 2) public boolean dispatchKeyEvent(KeyEvent event) 3) public boolean onTouchEvent(MotionEvent event) 而是如下函数 …

ASP.NET数据报表之柱状图 ------工作日志

#region 柱形色调 /// <summary> /// 柱形色调 /// </summary> private string[] myColor new string[] { "DarkGreen", "DimGray", "DodgerBlue", "Orchid", //Peru "Orange", "Orchid", &q…

接口安全--签名验证

为防止第三方冒充客户端请求服务器&#xff0c;可以采用参数签名验证的方法&#xff1a; 将请求参数中的各个键值对按照key的字符串顺序升序排列&#xff08;大小写敏感&#xff09;&#xff0c;把key和value拼成一串之后最后加上密钥&#xff0c;组成key1value1key2value2PRIV…

Runtime类

Runtime类也在java.lang包中&#xff0c;这个类没有提供构造器&#xff0c;但是提供的却非静态方法&#xff0c;而是在方法中提供了一个静态方法来返回当前进程的Runtime实例&#xff0c;采用的单例设计模式。 其作用&#xff1a;可以对当前java程序进程进行操作、打开本机程序…

Spring MVC 返回NULL时客户端用$.getJSON的问题

如果Spring MVC返回是NULL&#xff0c;那么客户端的$.getJSON就不会触发&#xff1b; 20170419补充 后台的输出为&#xff1a; DEBUG [org.springframework.web.servlet.DispatcherServlet] - Null ModelAndView returned to DispatcherServlet with name springMVC: assuming …

duilib设置滚动条自动滚动到底

控件属性中添加 vscrollbar"true" autovscroll"true"分别是启用竖向滚动条&#xff0c;是否随输入竖向滚动

MVC,MVP 和 MVVM 的图示

复杂的软件必须有清晰合理的架构&#xff0c;否则无法开发和维护。 MVC&#xff08;Model-View-Controller&#xff09;是最常见的软件架构之一&#xff0c;业界有着广泛应用。它本身很容易理解&#xff0c;但是要讲清楚&#xff0c;它与衍生的 MVP 和 MVVM 架构的区别就不容易…

Java JDBC学习实战(二): 管理结果集

在我的上一篇博客《Java JDBC学习实战&#xff08;一&#xff09;&#xff1a; JDBC的基本操作》中&#xff0c;简要介绍了jdbc开发的基本流程&#xff0c;并详细介绍了Statement和PreparedStatement的使用&#xff1a;利用这两个API可以执行SQL语句&#xff0c;完成基本的CURD…

error: storage size of ‘threads’ isn’t known

出错的代码行&#xff1a; pthread_t threads[NUM_THREADS];原因&#xff1a; NUM_THREADS 无值 原先&#xff1a; #define NUM_THREADS修改为 #define NUM_THREADS 5

android之相机开发

http://blog.csdn.net/jason0539/article/details/10125017 android之相机开发 分类&#xff1a; android 基础知识2013-08-20 22:32 9774人阅读 评论(2) 收藏 举报Android在android中应用相机功能&#xff0c;一般有两种&#xff1a;一种是直接调用系统相机&#xff0c;一种自…

文件和文件夹权限-Win7公共盘中出现大量临时文件

公司中有一个文件服务器&#xff0c;给不同部门和员工设置了不同的权限&#xff0c;最近有员工&#xff08;没有修改权限&#xff0c;有读取及执行,读取,写入&#xff09;反映在公共盘上修改文件的时候会产生大量的临时文件&#xff0c;添加上修改权限之后就可以了&#xff0c;…

Duilib编辑框Edit输入完自动跳到下一个编辑框

首先xml文件中设置edit的maxchar参数&#xff0c;默认255好像。 <edit maxchar"10" />然后在notify函数中加入以下代码 if (msg.sType _T("textchanged")) {if (static_cast<CEditUI*>(msg.pSender)->GetMaxChar() msg.pSender->GetT…

Mysql数据库安全管理配置

1.删除test库 原因&#xff1a; The default MySQL installation comes with a database named test that anyone can access. This database is intended only for tutorials, samples, testing, etc. Databases named "test" and also databases with names starti…

duilib清空richedit内容

推荐使用以下方法&#xff1a; m_pRichEdit->SetSelAll(); m_pRichEdit->Clear();不推荐使用以下方法&#xff1a; m_pRichEdit->SetText("");虽然效果是一样的&#xff0c;但是当编辑框中文本存在多种格式的时候&#xff0c;第二种方法会存在问题&#x…

新学了一个用python编写的简单的百度贴吧帖子的爬虫

# -*- coding: utf-8 -*- #--------------------------------------- # 作者&#xff1a;chendn # 语言&#xff1a;Python 2.7.10 #---------------------------------------import string,urllib2 def tieba(url,beginPage,endPage):for i in range(beginPage,endPage1):…

duilib自定义消息

/** NOTE: All Message Numbers below 0x0400 are RESERVED.** Private Window Messages Start Here:*/ #define WM_USER 0x0400从WM_USER往上加就行了

BZOJ 2190仪仗队【欧拉函数】

问题的唯一难点就是如何表示队长能看到的人数&#xff1f;如果建系&#xff0c;队长所在的点为&#xff08;0,0&#xff09;分析几组数据就一目了然了&#xff0c;如果队长能看到的点为(m,n),那么gcd&#xff08;m&#xff0c;n&#xff09;1即m n 互质或者是&#xff08;0,1&a…