- SVN独立运行时的权限配置
- 完成SVN的快速配置后,版本库之间的权限变成了一个重要的问题!如果没有定义版本库的权
- 限,每个有权限的人都可以修改版本库,很容易造成混乱。
- 假设:
- A项目:
- A1 实际在用的版本库
- A2 开发使用的版本库
- B项目:
- B1 实际在用的版本库
- B2 开发使用的版本库
- 以其中的一个项目为例:
- 用户tom:可能读写A2,B2的版本库,只能看A1的版本库
- 用户jim:只能读A1,A2的版库,可以读写B1,B2的版本库
- .....
- 用户cheng:要能读写所有的版本库
- (更多的权限,用户可以自行添加,本例只以cheng,tom,jim三个用户做测试)
- 如何配置权限?每个版本库都有一个权限控制文件authz,密码文件passwd,全局配置文件
- svnserve.conf 。要实现上面的需求,我们需要让他们进行统一的认证和权限分配,这样才
- 会不出问题!好在,他们可以指定authz,passwd文件,所以我们只需要将他们的路径指向同
- 一个地方,才不会出问题!
- 实施的思路如何?
- SVN_HOME
- |project1 project2
- | |
- A1 A2 B1 B2
- 1、首先建立project1,project1这两个版本库
- 2、配置projectA,projectB认证及权限
- 3、配置cheng的权限
- 4、建立A1,A2,B1,B2的目录
- 5、建立相关的用户
- 具体操作:
- # svnadmin create /home/svn/project1
- # svnadmin create /home/svn/project2
- # mkdir /home/svn/conf
- # cp /home/svn/project1/conf/{authz,passwd} /home/svn/conf
- # ll /home/svn/conf
- total 8
- -rw-r--r-- 1 root root 1080 Feb 24 11:35 authz
- -rw-r--r-- 1 root root 309 Feb 24 11:35 passwd
- # rm -rf /home/svn/project{1,2}/conf/{authz,passwd}
- 配置版本库的全局文件
- # grep -Ev "^$|#|sasl" /home/svn/project1/conf/svnserve.conf
- [general]
- anon-access = none
- auth-access = write
- password-db = ../../conf/passwd
- authz-db = ../../conf/authz
- realm = project1 --> 在认证时,会有该信息出来
- # cat /home/svn/project2/conf/svnserve.conf
- [general]
- anon-access = none
- auth-access = write
- password-db = ../../conf/passwd
- authz-db = ../../conf/authz
- realm = project2
- 建立密码文件:
- # grep -v "^#" /home/svn/conf/passwd
- [users]
- cheng = 123456
- tom = 123456
- jim = 123456
- 建立权限配置文件:
- # grep -Ev "^$|#|alias" /home/svn/conf/authz
- [groups]
- adm = cheng
- user = tom,jim
- [project1:/]
- @adm = rw
- * = r
- [project1:/A1]
- @adm = rw
- tom = r
- jim = r
- [project1:/A2]
- @adm = rw
- jim = r
- tom= rw
- [project2:/]
- @adm = rw
- * = r
- [project2:/B1]
- @adm = rw
- jim = rw
- [project2:/B2]
- @adm = rw
- @user = rw
- 启动svn(关于这个服务脚本,请http://myhat.blog.51cto.com/391263/787116)
- (运行时,请指定SVN目录为/home/svn,脚本请根据SVN实际情况做修改,否则目录不正确的
- 话,会造成用户认证失败)
- # /etc/init.d/svn start
- Starting svnserve...
- Finished!
- 此时,可以通过Windows或是linux客户端连接svn服务器checkout了。
- 服务启动后,我用windows客户端使用checkout时,project1/project2里面都是空的,我使
- 用cheng这个账户登入,新建了A1,A2,B1,B2,并且在windows下,客户端的权限已经生效了,
- 都是按照我之前的规划进行着!。 具体的,我会找一台Linux机器演示并确认,顺便熟悉一
- 下命令行!
- # svn --version
- svn, version 1.6.11 (r934486)
- compiled Jun 8 2011, 16:22:13
- 先用账户cheng来checkout并确认一下,目录是否建好了。
- # svn co svn://192.168.10.9/project1 --username=cheng --password=redhat
- A project1/A1
- A project1/A2
- Checked out revision 1.
- # ll project1/
- total 8
- drwxr-xr-x 3 root root 4096 Feb 24 21:01 A1
- drwxr-xr-x 3 root root 4096 Feb 24 21:01 A2
- # svn co svn://192.168.10.9/project2 --username=cheng --password=redhat
- A project2/B1
- A project2/B2
- Checked out revision 1.
- 两个版本库都OK了,现在我们用其他用户来试试!清除缓存
- # rm -rf project*
- # svn co svn://192.168.10.9/project1 --username=tom --password=redhat
- A project1/A1
- A project1/A2
- Checked out revision 1.
- # svn co svn://192.168.10.9/project2 --username=tom --password=redhat
- A project2/B1
- A project2/B2
- Checked out revision 1.
- 使用tom用户,在A1中提交文件失败!
- # cd /root/project1/A1/
- # touch 123
- # svn ci -F 123 -m "new file 123" --force-log
- Authentication realm: <svn://192.168.10.9:3690> project1
- Password for 'tom':
- Store password unencrypted (yes/no)? no
- Adding A1/123
- Transmitting file data .svn: Commit failed (details follow):
- svn: Access denied
- 使用tom用户在B2中,提交文件成功!
- # cd /root/project2/B2/
- # touch file1.txt
- # svn add file1.txt
- A file1.txt
- # svn ci -F file1.txt -m "my file" --force-log
- Authentication realm: <svn://192.168.10.9:3690> project2
- Password for 'tom':
- Adding B2/file1.txt
- Transmitting file data .
- Committed revision 2.
-
SVN如何管理多项目
最新推荐文章于 2022-03-28 17:44:54 发布