我有一个我负责管理的存储库服务器(主要用于学术目的),各个团队都希望使用git和其他人svn。有些人需要访问这两个存储库。我不希望给个人用户shell访问权限,但我找不到任何方法让git-shell与svn(或带有git的svnserve)很好玩。有没有办法做到这一点?也许某种方式要求git-shell使用git-shell-commands的一些技巧将一个无法识别的命令传递给svnserve?
针对这种情况,规定的最佳做法是什么?
答案 0 :(得分:0)
没问题,只要你在不同的端口上运行它们。
如果您希望它们同时提供相同的存储库,那么它会变得更复杂一些。基本上你必须用另一个库模拟一个,并且因为它们没有共享相同的底层设计决策,所以这样的模拟会有弱点。
如果您正在讨论凭证处理缺乏协调,那么只需要让svn和git将其凭证检查委托给特定目的的凭证处理库(如pam,kerberos或其他东西)。
最佳做法是将凭据处理(身份验证)委派给其他人,但是通过svn配置文件(授权)和git用户(但不是他们的凭据)管理的svn用户(但不是他们的凭据)单独管理每个存储库通过git配置文件(授权)进行管理。
在任何情况下,我都不建议在同一产品中组合身份验证和授权,即使它可能是默认配置它们的方式。这是因为在密码不同步之前只是一个时间问题,并且每个产品以及每个帐户都需要复制任何“重置密码”工作。
答案 1 :(得分:0)
使用git-shell,可以通过创建用户'gitsvn',然后使用git-shell作为gitsvn登录shell来允许访问git和svn。创建以下目录树('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。