部署我的 Subversion 服务器时,我不喜欢为每个用户创建一个系统帐户,因此我在考虑另一种身份验证方法。
我想只使用一个带有 SSH 的系统帐户,然后使用 对用户进行身份验证svnserve
。
我尝试配置 SSH,以便每个用户都有不同的密钥和svnserve
具有特定命令的特定命令--tunnel-user
。我还将这些用户添加到我passwd
的存储库中的文件中。
我的问题是,只要完成 SSH 身份验证,它就svnserve
不会使用passwd
文件来验证--tunnel-user
名称,但允许读写。
有没有办法强制svnserve
阻止未输入密码的用户读取或提交存储库?
編輯:
如果我的设置无法实现这一点,是否有其他方法可以在 SSH 上提供 Subversion 服务,而无需为每个用户创建系统帐户?
答案1
隧道模式在设计上跳过 svnserve 身份验证,转而采用 SSH 身份验证。
“...该连接被视为预先认证的...”
您正在尝试将这种方法用于不该做的事情。那么,使用 SSL 上的 WebDAV 设置(在 Web 服务器的身份验证中定义用户)怎么样?
答案2
我找到了一个简单的解决方案。虽然 svnserve 无法对通过 SSH 认证的用户再次进行认证,但它仍然可以使用 authz 文件对其进行授权。
以下是我的设置:
- 用户
svn
是主帐户,其主页是/var/svn
- 所有用户使用
svn
账户通过 SSH 连接到 SVN 服务器 svn
账户拥有其账户中所有用户的所有公钥.ssh/authorized_keys
- 每个公钥都以
command="svnserve -r /var/svn -t --tunnel-user=<user1>"
(实际上更长因为我还禁用了隧道和 co) 为前缀。 - 每个存储库
/var/svn
都有authz-db = authz
conf/svnserve.conf
- 每个存储库都有自己的
conf/authz
文件来列出授权用户:
[群组] 开发人员 = <用户1>,<用户2> [/] @developers = rw * =
/var/svn/.ssh/authorized_keys
现在,我可以通过简单地添加一个具有新名称的新公钥来添加用户--tunnel-user
,并将此用户名添加到所有授权存储库。