我有一个主要为自己运行的SSH服务器,但现在有一些我想通过SVN与同事分享的代码。
我可以通过创build一个名为'svn'的独立帐户来与svn + ssh共享,但'svn'也可以用来login和查看我的文件(位于/ home / mine / Documents /等等)。 我尝试将bin / sh中的shell设置为/ etc / passwd中的bin / false,但是这也会阻止用户通过svn + ssh获取我的程序。
你有什么build议吗?
非常感谢! -Stephen
实际上你很容易得到你描述的内容; 关键是ssh的“强制命令”选项。 基本上你告诉ssh,不pipe客户端试图执行什么命令,它总是执行强制命令。 您将强制命令设置为指向一个validation命令是svnserve -t的简单包装脚本。 如果是,它按要求执行。 否则它退出。 这是我使用的脚本:
#!/斌/庆典
#
#确认请求的命令是svnserve呼叫。
#
#请注意,sshd存储客户端请求的命令
#variables“SSH_ORIGINAL_COMMAND”。
如果[[$ SSH_ORIGINAL_COMMAND =“svnserve -t”]]
然后
exec $ SSH_ORIGINAL_COMMAND
其他
回声“你只允许svn访问这个服务器。”
科幻
有两种方法来设置这个强制命令:
~/.ssh/authorized_keys 。但为了安全起见,您必须禁用密码validation,否则可以使用密码login(绕过强制命令)并编辑~/.ssh/authorized_keys以解除限制。 /etc/ssh/sshd_config的末尾添加一个“Match”节,以便只能使用svn的用户。 它应该看起来像这样:
匹配用户svn
ForceCommand / usr / local / bin / validate_svn
您需要更改您的主目录的权限。
$ chmod 750 /home/mine
你不能使用http / https? 您可以使用.htaccess / htpasswd样式身份validation机制,而不是创build适当的shell帐户。
你也许可以为svn + ssh指定另外的authentication(使用一个单独的密码文件),但是我从来没有这样做过。
如果您不希望名为“svn”的用户能够查看您的文件 – 也就是说,您只希望该用户有权访问除SVN存储库以外的任何内容,则只需稍微调整权限即可。 你知道如何使用chmod吗?
感谢大家的帮助!! 我没有意识到我只需要chmod顶层目录。 我写了大量的数字处理科学研究计划,但刚开始修改控制和代码分发(如果我有任何'名声'点,我会upvote你'笑')。 Insyte:我对你使用ForceCommand的说明非常高兴 – 我有另一个共享任务(我没有使用SVN的存档数据,所以我会试图找出如何使用scp),这将是一个非常优雅的解决scheme! -Stephen
想到chroot的SSH服务器,并启动该chroot环境中的颠覆服务器?
这可能有点棘手,但应该更安全,因为没有人能够在这个“ 监狱 ”之外做任何事情(这也防止了特权升级)。