转载自:http://www.2cto.com/Article/201407/314503.html


Linux下SVN Server 的使用及权限配置权限


一、安装SVN

Linux 下可以直接通过如下命令直接获取svn server:(我使用的服务器系统为Debian 7.5 稳定版)

apt-get install subversion

安装完成后,可通过svnserve --version 查看安装的版本,我所使用的svn server 版本为1.6.17:

二、创建代码库

创建库(以test库为例):

sudo svnadmin create /home/user/svn/test

这样,一个简单的代码仓库就创建完成了。

接下来启动svn服务:

svnserve -d -r /home/user/svn/

然后client端就可以通过“svn://ip.ip.ip.ip/test”来访问svn了。

 

三、权限配置

进入test目录之后,你会看到里边有个“conf”文件夹,进入conf文件夹,ls一下,你会看到有三个文件authz、passwd、 svnserve.conf三个配置文件,其中authz用来配置用户访问权限的,passwd用来配置用户及密码,svnserve.conf是对整个 svnserve的进程进行配置的。


简单的说,就是svnserve.conf中打开四句,

passwd,写上用户名和密码

authz,建组,并对组设置rw权限

终止进程,重启


使用nano或者vi工具打开svnserve.conf,找到“# password-db = passwd”,这一句是指定当前库所对应的用户配置文件的,我们需要把最前边的“#”和空格删掉;

找到“# anon-access = none

“# auth-access = write”这两句,第一句是用来控制匿名访问的,我们直接给它设置成none就好了,第二句用来控制经过验证允许访问库的用户的权限,这里我们设置成write就可以,当然,也要把前边的“#”和空格都删掉;

找到“# authz-db = authz”,这一句是用来指定当前库对应的用户权限配置文件的,我们把最前边的“#”和空格都删掉,这样库在运行的时候要根据authz这个配置文件去匹配用户权限。


到这里,我们的所有配置文件都可以起到他们应有的作用了,接下来就是对细节的具体配置:

对于passwd:

很简单,在最后直接添加用户就好,格式为:“用户名 = 密码”,例如:“test_user = 12345


对于authz:

主要是分为两类配置:[groups]类配置、以[repo:/]开头的配置。

1.[groups]的配置很容易理解,就是群组。格式也比较简单,即“group_name = user1,user2,user3”,如果有多个用户,可以直接通过“,”的方式拼接就可以了,例如:

 

[groups]

 # 经理

g_manager = michael

# 北京办人员

g_beijing = scofield

# 上海办人员

g_shanghai = lincon

# 总部一般员工

g_headquarters = rory, linda

2.以[repo:/]开头的配置,上边的[gourps]配置是用来划分用户分组的,那么以[repo:/]开头的配置就是用来具体的划分用户读 写权限的了,其中repo是你的库的名字,即上边我们通过“svnadmin create /home/user/svn/test”命令所创建的库“test”,下边我们直接用例子来说明它的使用方法:

对项目根目录做限制,该目录只允许经理才能修改,其他人都只能拥有读的权限:

[test:/]

@g_manager = rw

* = r

“[test:/]” 表示这个目录结构的相对根节点,或者说是 test 项目的根目录。这里的 “@” 表示接下来的是一个组名,不是用户名。因为目前 g_manager 组里面只有一个 michael,你当然也可以将 “@g_manager = rw” 这一行替换成 “michael = rw” ,表达的意义完全一样。

“*” 表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”

“* = r” 则表示“那些人只能读,不能写”。

对于根目录下边的子目录,其权限配置方式是相同的,是需要把地址指明就可以了,即[test:/folder1/folder2],这里就不赘述了。

注意:配置中我们可能会遇到“* =”这样的情况,他的目的是用来隔断权限的继承性。如果在某一级目录的权限配置里加上这一句,则表明除了该配置中的用户之外的其他用户完全没有这一级目录的任何权利,既不可读,更不可写。

当所有的三个文件全都配置完成之后,接下来就是要让它们都生效了,首先我们需要确保svnserve服务已经停掉了,可以通过“ps aux|grep svn”的方式来查看svn时候还在运行,如果还在运行的话直接通过“kill -9 [svn进程编号]”的方式把它停掉就可以了,然后在通过命令“svnserve -d -r /home/user/svn/”来重新启动svn服务,以上配置的三个文件就都起作用了!


然后client端就可以通过“svn://ip.ip.ip.ip/test”来访问svn了。


---

Linux下SVN Server 的使用及权限配置权限

SVN用户权限配置

repository目录下的conf有三个文件:

svnserve.conf、passwd、authz,依次修改

你可以直接删除默认的svnserve.conf文件,然后使用下面的配置:
# vi svnserve.conf

[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = Test

说明:
anon-access = none #不允许匿名用户访问
auth-access = write #通过验证的用户可以读和写
password-db = passwd #用户保存文件
authz-db = authz #权限管理文件
realm = Test#仓库名称


设置用户账号。你可以直接删除默认的passwd文件,然后使用下面的配置:
# vi passwd

[users]
linzuxin = linzuxin

说明:

[users] #是必须的,标记为用户配置开始
linzuxin = linzuxin # linzuxin 是用户名 , linzuxin 是密码。注意,是明文密码

往后所以仓库的用户都在这里记录就可以了。至于那个用户,允许访问那个仓库,在权限管理里限制。


设置用户权限。你可以直接删除默认的authz文件,然后使用下面的配置:
# vi authz

[groups]
devops = linzuxin

[/]
@devops = rw

说明:

devops = linzuxin #devops是组名,linzuxin是用户名,归为这一组,可以有多个用户,用逗号隔开

@devops = rw #说明devops组对所有目录都有读写权限

---


实际中:


vi /var/local/**.com/conf/passwd

vi /var/local/**.com/conf/svnserve.conf


# find / -name svn

usr/bin/svn


ps aux|grep svn

kill -9 4727

svnserve -d -r /var/local/

---

举例:想给svn增加一个前台用户。对某几个目录具有rw权限。

 

先进入,cd /var/local/*****/conf

 

(此处*****是我们的域名)

 

1vi svnserve.conf

 

authz-db=authz

 

2vi authz

[groups]

devops = whb,zy,gc,xhc,jjx,wjh

front = ml

 

[/]

@devops = rw

[/front]

@front = rw

[/paimai/public]

@front = rw

[/paimai/template]

@front =rw

 

3ps aux|grep svn

 

4kill -9 4727

 

5.svnserve –d –r /var/local/****.com


6.报这个错:


Linux下SVN Server 的使用及权限配置权限_第1张图片


Linux下SVN Server 的使用及权限配置权限_第2张图片----

svn: No repository found in 'svn:..解决方案

svn服务未启动或者是启动的时候未指定svn仓库路径

使用如下命令:

sudo svnserve -d -r /var/svn

后面的目录是你svn服务的仓库路径

另外要使用sudo取得管理员权限,否则可能在提交代码的时候出现权限问题


7。

Linux下SVN Server 的使用及权限配置权限_第3张图片



8.项目里,增加

front

 

 

就成功了!



有一次,SVN update 发生冲突了。提示Cleanup。

仍不成功。原来没有点:Break locks.


Linux下SVN Server 的使用及权限配置权限_第4张图片

---

虽然折腾了好几次,在实际中,还是会出现一些问题。

我在配置yi.**网站时

开始,连不上,是服务器没开放3690端口。

看到:

iptables -I INPUT -p tcp --dport 3690 -j ACCEPT (加这句有用,临时开放)


#vi /etc/sysconfig/iptables (永久开放)
添加以下语句
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT(网上这么写,但会报错)

后来,改写为:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT(可以)

重启iptables

#service iptables restart


再按以上去配置。三个配置文件都要改。后面要重启。注意目录。


如果是:svnserve -d -r /home/user/svn/

然后client端就可以通过“svn://ip.ip.ip.ip/test”来访问svn了。


如果写成:svnserve -d -r /home/user/svn/test

client端就可以通过“svn://ip.ip.ip.ip/”来访问


客户端清除密码:Settings->Saved Data

客户端修改URL:Relocate