【问题标题】:Run svnserve *and* git-shell on the *same* server?在 *same* 服务器上运行 svnserve *and* git-shell?
【发布时间】:2012-05-15 19:59:45
【问题描述】:

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

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

【问题讨论】:

    标签: git svn permissions


    【解决方案1】:

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

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

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

    最佳实践是将凭据处理(身份验证)委托给其他东西,但单独管理每个存储库,通过 svn 配置文件(授权)和 git 用户(但不是他们的凭据)管理 svn 用户(但不是他们的凭据)通过 git 配置文件管理(授权)。

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

    【讨论】:

      【解决方案2】:

      使用 git-shell,可以通过创建用户 'gitsvn' 来允许访问 git 和 svn,然后使用 git-shell 作为 gitsvn 登录 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-commands 中,所有的赌注都将失败。因此,根据您的安全情况,可能值得围绕 svnserve 编写一个参数检查包装器,以防止恶意 svn 客户端将任意参数传递给 svnserve。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 2018-07-11
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多