在 *same* 服务器上运行 svnserve * 和 git-shell



我有一个仓库服务器,我的任务是管理(主要是出于学术目的(,各个小组都想使用 git 和其他 svn。有些人需要访问这两个存储库。我不想给个人用户 shell 访问权限,但我找不到任何方法让 git-shell 在 svn 上玩得很好(或者 svnserve 与 git(。有没有办法做到这一点?也许某种方式要求 git-shell 将一个无法识别的命令传递给 svnserve 与一些 git-shell-command 的技巧?

对于这种情况,规定的最佳实践是什么?

没问题,只要你在不同的端口上运行它们。

如果您希望它们都提供相同的存储库,那么它会变得有点复杂。 基本上,您必须使用另一个库来模拟一个库,并且由于它们不共享相同的底层设计决策,因此这样的模拟将具有弱点。

如果您正在讨论凭据处理缺乏协调的问题,那么只需让 svn 和 git 将其凭据检查委托给特定用途的凭据处理库(如 pam、kerberos 或其他库(。

最佳做法是将凭据处理(身份验证(委托给其他内容,但单独管理每个存储库,

SVN 用户(但不是他们的凭据(通过 SVN 配置文件(授权(管理,git 用户(但不是他们的凭据(通过 git 配置文件(授权(管理。

无论如何,我不建议在同一产品中组合身份验证和授权,即使这可能是配置它们的默认方式。 这是因为密码不同步只是时间问题,并且每个产品以及每个帐户都需要复制任何"重置密码"工作。

使用 git-shell,可以通过创建一个用户 'gitsvn

' 来允许访问 git 和 svn,然后使用 git-shell 作为 gitsvn login shell。创建以下目录树(在"gitroot"中使用裸 git 存储库,在"svnroot"中使用 svn 存储库(。

gitsvn@server:~$ pwd
/home/gitsvn
gitsvn@server:~$ ls -l *
gitroot:
total 4
drwxr-xr-x 7 gitsvn gitsvn 4096 Jan  5 17:17 test
git-shell-commands:
total 4
-rwxr-xr-x 1 gitsvn gitsvn 52 Jan  5 17:22 help
lrwxrwxrwx 1 gitsvn gitsvn 17 Jan  5 16:22 svnserve -> /usr/bin/svnserve
svnroot:
total 4
drwxr-xr-x 6 gitsvn gitsvn 4096 Jan  5 16:23 test3
gitsvn@server:~$ cat git-shell-commands/help 
#!/usr/bin/python
print """
Restricted shell.
"""
gitsvn@server:~$

可以通过以下方式访问存储库:

ruser@client:/tmp/svnc$ svn checkout svn+ssh://gitsvn@server/home/gitsvn/svnroot/test3
gitsvn@server's password: 
A    test3/it
Checked out revision 1.
ruser@client:/tmp/svnc$ git clone gitsvn@server:/home/gitsvn/gitroot/test
Cloning into 'test'...
gitsvn@server's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
Checking connectivity... done.

我相信 git-shell 从 git 端提供了基本的安全性。但是,一旦您将任意应用程序放置在 git-shell-command 中,所有赌注都将落空。因此,根据您的安全情况,可能值得围绕 svnserve 编写一个参数检查包装器,以防止恶意 svn 客户端将任意参数传递给 svnserve。

最新更新