SSH服务器上的用户目录权限

我有一个主要为自己运行的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访问这个服务器。”
科幻

有两种方法来设置这个强制命令:

  1. 如果用户使用基于密钥的身份validation(他们应该)login,则可以在其公钥中的第一个字段中添加“command =”/ usr / local / sbin / validate_svn“ ~/.ssh/authorized_keys 。但为了安全起见,您必须禁用密码validation,否则可以使用密码login(绕过强制命令)并编辑~/.ssh/authorized_keys以解除限制。
  2. /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环境中的颠覆服务器?

这可能有点棘手,但应该更安全,因为没有人能够在这个“ 监狱 ”之外做任何事情(这也防止了特权升级)。