要让外包团队完全看不到核心算法目录,关键在于SVN服务端显式拒绝其对该路径的任何访问——包括svn list、checkout、info等操作,需在authz中为@outsourcing =(等号后无字符),并确保svnserve.conf启用anon-access = none和authz-db = authz,重启服务后测试应报“Access denied”而非空列表。

要让外包团队完全看不到核心算法目录,关键不是“隐藏界面”,而是让SVN服务端拒绝他们对该路径的任何访问请求——包括 svn list、svn checkout 甚至 svn info。一旦配置生效,外包人员执行这些命令会直接报错(如 Access denied 或 Path not found),而非返回空列表。
确认服务端已启用权限校验
所有权限控制的前提是 SVN 服务真正启用了认证与授权。检查仓库下的 conf/svnserve.conf 文件中 [general] 区块是否包含以下设置:
- anon-access = none:禁止未登录用户访问,防止绕过认证
- auth-access = write:允许已认证用户执行写操作(读权限由 authz 控制)
- password-db = passwd:指定密码文件路径
- authz-db = authz:明确指向权限配置文件
在 authz 中定义外包组并清空其目标路径权限
编辑 conf/authz 文件,在 [groups] 段添加外包团队用户:
[groups]<br>outsourcing = tom, jerry, alice
接着为算法目录(例如 /trunk/algo)单独设置空权限:
[myrepo:/trunk/algo]<br>@outsourcing =
注意:等号后面不能有任何字符(包括空格)。这个空值表示“显式拒绝所有操作”,SVN 会将其解释为“无任何权限”,效果就是彻底不可见。
同时确保该路径的父目录(如 [myrepo:/trunk])没有给外包组赋予泛化权限,否则可能因权限继承导致规则失效。
避免默认权限覆盖关键路径
不要在根路径或上级路径中使用 * = r 这类宽泛授权,尤其当外包人员未被显式列入任何组时,* 可能意外赋予他们只读权。推荐采用“白名单+显式拒绝”策略:
- 为内部开发组(如
@devs)分配rw - 对外包组在敏感路径下设空权限(
@outsourcing =) - 其他路径可设
* =(空)或不配置,保持最小暴露面
验证与生效
修改后必须重启 svnserve 服务(例如 killall svnserve && svnserve -d -r /home/svn)。用外包账号测试:
-
svn list svn://host/myrepo/trunk/algo→ 应报错,而非返回空结果 -
svn checkout svn://host/myrepo/trunk/algo→ 同样失败
若仍能列出或检出,说明权限未生效,需检查 svnserve.conf 是否启用 authz-db、authz 文件路径是否正确、用户是否属于指定组,以及目标路径是否已在仓库中真实存在并提交过。

















