我在一个有严格安全要求的组织工作,有时过度。我的项目团队正在尝试创建一个SVN存储库,我们很难设置一个以满足我们的需求和安全要求。
我们的IT部门要求我们使用双因素身份验证进行身份验证。每个开发人员都有一个RSA令牌,必须用于通过SSH登录存储库主机。令牌上显示的值每分钟更改一次,每个值只能使用一次。
开发人员需要存储密码的功能。这阻止我们使用svn+ssh
登录存储库。由于RSA令牌每分钟更改一次,因此我们无法存储SSH密码。更糟糕的是,RSA令牌会使我们每分钟减少一次SVN操作。这是完全不可接受的,特别是因为我们有将多个SVN操作链接在一起的脚本。
我们试图通过打开带端口转发的SSH隧道来妥协。我们将使用ssh user@hostmachine -L 3690:localhost:3690
打开一个隧道,将我们本地计算机上的所有SVN请求转发到运行svnserve
进程的安全计算机。这意味着我们可以使用双因素身份验证登录,然后使用单独的SVN用户名和密码(可以存储)与我们的实用程序一起使用。
不幸的是,我们注意到我们不需要隧道;端口3690可用于任何可以看到主机名的计算机。这对IT来说是不可接受的,我们的系统管理员认为svnserve
是问题所在,所以她想知道我们是否必须回到svn+ssh
。
有任何解决方案有效吗?我们的系统管理员是否正确? svnserve
上是否有一个选项会强制它只收听来自localhost的流量?
答案 0 :(得分:2)
使用:
svnserve -dr /my/repo --listen-host 127.0.0.1
这样服务只会侦听loopback接口。当您使用ssh连接时:
ssh -L3690:127.0.0.1:3690 user@svnserver.mycompany.com
另见:
vince@f12 ~ > svnserve --help
usage: svnserve [-d | -i | -t | -X] [options]
Valid options:
-d [--daemon] : daemon mode
-i [--inetd] : inetd mode
-t [--tunnel] : tunnel mode
-X [--listen-once] : listen-once mode (useful for debugging)
-r [--root] ARG : root of directory to serve
-R [--read-only] : force read only, overriding repository config file
--config-file ARG : read configuration from file ARG
--listen-port ARG : listen port
[mode: daemon, listen-once]
--listen-host ARG : listen hostname or IP address
[mode: daemon, listen-once]
-T [--threads] : use threads instead of fork [mode: daemon]
--foreground : run in foreground (useful for debugging)
[mode: daemon]
--log-file ARG : svnserve log file
--pid-file ARG : write server process ID to file ARG
[mode: daemon, listen-once]
--tunnel-user ARG : tunnel username (default is current uid's name)
[mode: tunnel]
-h [--help] : display this help
--version : show program version information
答案 1 :(得分:0)
svnserve可能有选项只能侦听localhost,但这听起来像是防火墙配置问题。
如果端口3690不能从外部访问,则应该被防火墙阻止。无论是svnserve还是其他任何东西都在监听该端口。然后,svnserve可以继续侦听3690,但只接收来自localhost的连接,因为其他人被防火墙阻止。