如何设置svn+;多个用户的ssh?

如何设置svn+;多个用户的ssh?,svn,ssh,Svn,Ssh,如何在linux服务器上设置只能通过SVN+SSH访问的SVN存储库?应该有不同的用户,所有这些用户都应该能够使用SVN,因此他们不应该登录到服务器,并且应该禁止没有SSH的SVN。为了确保一切都能正常工作,我在一个带有Subversion命令行客户端的Ubuntu14.04服务器(用于托管)上遵循了这些确切的说明,版本1.8.8和ubuntu 16.04笔记本电脑(用于使用SVN)。[很久以后,我用Ubuntu 18.04.3 LTS服务器和客户端测试/确认了这一点(即,两台计算机都有相同的当

如何在linux服务器上设置只能通过SVN+SSH访问的SVN存储库?应该有不同的用户,所有这些用户都应该能够使用SVN,因此他们不应该登录到服务器,并且应该禁止没有SSH的SVN。

为了确保一切都能正常工作,我在一个带有Subversion命令行客户端的Ubuntu14.04服务器(用于托管)上遵循了这些确切的说明,版本1.8.8和ubuntu 16.04笔记本电脑(用于使用SVN)。[很久以后,我用Ubuntu 18.04.3 LTS服务器和客户端测试/确认了这一点(即,两台计算机都有相同的当前操作系统)。]

步骤1:定义用户

让我们假设有两个不同的用户将使用SVN。我们必须为机器上的这些用户定义本地帐户,以便能够将他们放入一个公共组。这是授予组对存储库的写访问权所必需的,否则提交将不起作用。我们还将了解如何防止这些用户登录服务器(因为我们只希望他们作为SVN用户;本地帐户只是实现此目的的一种不可避免的手段)。 因为svn+ssh需要ssh登录,所以我们需要一个额外的用户来连接到机器。因此,我们有:

USER-1 (to access SVN)
USER-2 (to access SVN)
SSH-USER (to connect to the server)
SVN-GROUP (a group with members USER-1 and USER-2)
在命令中,即:

adduser USER-1
adduser USER-2
adduser SSH-USER
groupadd SVN-GROUP
sudo usermod -aG SVN-GROUP USER-1
sudo usermod -aG SVN-GROUP USER-2
要检查是否一切正常,您可以通过以下方式列出小组及其成员(如中所述——如您认为有用的答案/响应):

步骤2:创建SVN并用内容填充

首先,我们使用用于登录服务器的用户SSH-user登录服务器。然后,我们为SVN创建一个空文件夹,然后用一个空SVN填充它,然后设置权限,以便组中的每个人都有完全访问权限

mkdir /home/SSH-USER/SVN
svnadmin create /home/SSH-USER/SVN
chgrp -R SVN-GROUP /home/SSH-USER/SVN
chown -R SSH-USER /home/SSH-USER/SVN
chmod -R 770 /home/SSH-USER/SVN
最后两个命令从“others”获取所有权限,并将读/写/执行权限授予所有者(SSH-USER)和组(SVN-group)。我已经测试过了:仅仅使用读/写权限是不够的。但是,我们可以将0(无权限)授予所有者,因为我们只需要他登录,而不需要提交或读取或其他任何内容。但是,如果我们想删除该用户的整个SVN,我们不应该窃取他的权利

尽管还没有配置访问控制,我们现在已经可以用内容填充它了。原因是本地用户SSH-user可以直接提交更改,即使SVNs访问配置(我们还没有涉及)禁止更改。我们只添加两个空文件夹:

 svn mkdir file:///home/SSH-USER/SVN/folder1
 svn mkdir file:///home/SSH-USER/SVN/folder2
步骤3:配置SVN访问控制

首先,我们编辑SVN:/home/SSH-USER/SVN/conf/svnserve.conf的“主配置文件”。在此,请确保文件包含以下三行:

anon-access = none
auth-access = write
authz-db = authz
注意:这三行都已经存在于文件中,但是注释掉了。但是,第一行默认授予匿名就绪访问权限,因此我们将其从“read”更改为“none”。此外,在大多数指令中,要求取消注释行“#password db=passwd”。但是,我们不需要这样做,因为我们只授予SVN+SSH访问权限,所以不使用密码

激活了身份验证文件authz之后,我们现在使用它来设置哪个用户可以访问哪个文件夹。因此,请确保文件authz包含以下行:

[groups]
SVN-GROUP = USER-1,USER-2
[/]
* =
@SVN-GROUP = rw
首先,请注意,authz文件中使用的组名的选择方式与服务器上的组相同,以确保一致性。您可以选择任何想要的组名。另一方面,用户必须与服务器上的本地用户相同。根据上面的定义,两个用户都可以完全访问整个存储库,其他用户没有任何访问权限。只需添加更多内容,即可添加更多特定权利,例如:

[/folder1]
USER-1 = rw
USER-2 = 
[/folder2]
USER-1 = 
USER-2 = rw
步骤4:设置对服务器的访问权限

首先,我们需要创建一个文件夹“.ssh”,然后为所有想要访问SVN的用户添加公共ssh密钥。但是,各个用户不会使用各自的帐户登录,而是使用用户SSH-user的帐户。这样,我们只有一个文件来管理访问。当其中一个用户登录(使用SSH-USER帐户)时,SSH访问文件将该用户更改为相应的本地用户

mkdir /home/SSH-USER/.ssh
touch /home/SSH-USER/.ssh/authorized_keys
nano /home/SSH-USER/.ssh/authorized_keys
现在,用以下内容填写授权密钥:

command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-1 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf" ssh-rsa PUBLIC-KEY-OF-USER-1 local-username-on@client-pc-of-USER-1
command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-2 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf" ssh-rsa PUBLIC-KEY-OF-USER-2 local-username-on@client-pc-of-USER-2
对于不熟悉授权密钥文件的用户,请注意本地用户名-on@client-pc-of-USER-i只是一个用于管理/标记不同条目(即用户名和机器)的标签,因此此处的“信息”不会出错。此外,PUBLIC-KEY-OF-USER-i是实际密钥,即在该用户的相应公钥文件中找到的非常长的字符串

现在,两个用户都可以使用以下命令访问SVN:“SVN checkout SVN+ssh://SSH-USER@SERVER-URL/SVN。“。注意,由于前面设置的限制,USER-1只能访问folder1,USER-2只能访问folder2。此外,由于svnserve命令将/home/SSH-USER定义为SVN的根,因此checkout命令不需要(或允许)使用完整路径,只需使用/home/SSH-USER之后的所有内容(即文件夹需要以/SVN开头)

步骤5:微调(可选)

有几件事是可以选择的,但人们仍然希望做一些方便的事情:

(1) 减少用户1和用户2的权限。
(2) 不允许用户1和用户2在服务器上通过SSH登录。
(3) 允许SSH-USER的SSH登录(用于配置目的)

(一) 对于我发现的大多数教程/等,建议在访问控制中添加“无端口转发、无代理转发、无X11转发、无pty”以限制各自的权限。请自己搜索,他们在限制什么。然后,授权密钥文件将如下所示:

command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-1 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa PUBLIC-KEY-OF-USER-1 local-username-on@client-pc-of-USER-1
command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-2 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa PUBLIC-KEY-OF-USER-2 local-username-on@client-pc-of-USER-2
(二) 我们必须创建本地用户USER-1和USER-2,以便他们能够对存储库进行写访问。霍
command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-1 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa PUBLIC-KEY-OF-USER-1 local-username-on@client-pc-of-USER-1
command="svnserve -t -r /home/SSH-USER --log-file=/home/SSH-USER/SVN/svnlog.txt --tunnel-user=USER-2 --config-file=/home/SSH-USER/SVN/conf/svnserve.conf",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa PUBLIC-KEY-OF-USER-2 local-username-on@client-pc-of-USER-2