根据客户需求现在需要把SVN的访问方式由原来的svn+ssh的方式变为单独的svn的方式,但是在切换的过程中遇到了几个问题,先做一个归纳。

关于如何在linux下搭建这两种方式的svn server,可以具体参考博文“Centos 下面搭建svn 服务”来搭建,


首先明确两种方式的访问原理,

svn:读取仓库下面的配置文件来达到成功访问

svn+ssh:利用linux用户,将其加入到svn组以达到成功访问


问题一:配好了svn访问方式之后,提示svn server拒绝访问,

   1,检查svn server是否启动 (svnserver -d -r your-repository)

   2,配置svn server的时候,在配置文件svnserver.conf里面可以注销authz-db参数

   3, 由于svn+ssh方式走的不是svn默认的端口,按svn方式访问的时候需要配置防火墙添加svn默认端口号3690

问题二:配好了svn访问方式之后,旧的svn+ssh的方式还可以访问:

   1,确保将linux用户从svn组中剔除(gpasswd -d user group [gpasswd -a user group是将用户user加入group组])

   在剔除之后去测试旧的svn+ssh的方式,居然还能正常访问,后来新增一个svn 测试账号(当然此处测试账号还是linux账号)在加入svn和没有加入svn组的情况下分别测试,显示是符合实际要求的,问题可能出在当前我使用的账号上面。

   经过查找发现是因为当前账号james.liu对svn repository有ACL权限导致

   2,检查svn repository的ACL 权限,看是否有linux账号对其有ACL权限

1
2
3
4
5
6
7
8
......
# owner: svn
# group: svn
user::rwx
user:james.liu:rwx
group::rwx
mask::rwx
other::r-x

   删除用户james.liu的ACL权限

   setfacl -R -x u:james.liu svn-repository-path

最后发现并解决所有问题,一切达到预期效果