我有一个主要为自己运行的 SSH 服务器,但现在有一些代码想通过 SVN 与我的同事分享。
我可以通过创建一个名为“svn”的单独帐户将其与 svn+ssh 共享,但“svn”也可用于登录和查看我的文件(在 /home/mine/Documents/ 等中)。我尝试在 /etc/passwd 中将 shell 从 bin/sh 设置为 bin/false,但这也会阻止用户通过 svn+ssh 获取我的程序。
你有什么建议吗?
非常感谢!-斯蒂芬
答案1
实际上,获得您所描述的内容非常简单;关键是 ssh 的“强制命令”选项。本质上,您告诉 ssh,无论客户端尝试执行什么命令,它始终都会执行强制命令。您将强制命令设置为指向一个简单的包装器脚本,该脚本验证命令是否为svnserve -t
。如果是,则按要求执行。否则退出。这是我使用的脚本:
/bin/bash #!/bin/bash # # 验证请求的命令是否是 svnserve 调用。 # # 注意 sshd 将客户端请求的命令存储在 # 变量“SSH_ORIGINAL_COMMAND”。 如果 [[ $SSH_ORIGINAL_COMMAND = "svnserve -t" ]] 然后 执行$SSH_ORIGINAL_COMMAND 别的 echo “您只允许 svn 访问此服务器。” 菲
有两种方法可以设置此强制命令:
- 如果您的用户使用基于密钥的身份验证登录(他们应该这样做),您可以在 中添加“command="/usr/local/sbin/validate_svn'' 作为其公钥中的第一个字段
~/.ssh/authorized_keys
。但为了确保安全,您必须禁用密码身份验证。否则,他们可以使用密码登录(绕过强制命令)并进行编辑~/.ssh/authorized_keys
以删除限制。 - 在末尾
/etc/ssh/sshd_config
为只能使用 svn 的用户添加“匹配”节。它应该看起来像这样:
匹配用户 svn ForceCommand /usr/local/bin/validate_svn
答案2
您需要更改主目录的权限。
$ chmod 750 /home/mine
答案3
您不能使用 http/https 吗?那么您可以使用 .htaccess/htpasswd 样式的身份验证机制,而不必创建适当的 shell 帐户。
您可能也可以为 svn+ssh 指定替代身份验证(使用单独的密码文件),但我从未这样做过。
答案4
感谢大家的帮助!!我没有意识到我只需要 chmod 顶层目录。我为科学研究编写了很多数字运算程序,但刚刚开始进行修订控制和代码分发(如果我有任何“声誉”点,我会为你点赞)。Insyte:我对您使用 ForceCommand 的说明感到非常高兴 - 我有另一个共享任务(存档数据,我没有使用 SVN,因此我将尝试弄清楚如何使用 scp),这将是一个非常优雅的解决方案!-Stephen