OpenSSH就像“internal-sftp”,但是对于SCP来说呢?

我正在运行Debian stable,我正在寻找为我的'sftponly'组中的用户build立以下环境:

  • 获刑
  • 可以用SFTP传输
  • 可以和SCP转移
  • 不能用SSH交互式login

从我的实验和研究来看,sshd_config中的以下节段似乎让我有90%

Match group sftponly ChrootDirectory /sftp/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp 

这给我监狱的SFTP和没有SSH,这是很好的。 但是它也禁用了SCP,这是不理想的,因为相当多的客户端是传统的,使用SCP而不是SFTP的脚本进程(我们正在replace的服务器支持这两种协议),并且由于这些客户端并不在我们的控制之下修改,完全禁用SCP可能不切实际。

这个configuration可以禁用SCP,因为传入的SCP连接会导致sshd像用户那样通过用户的loginshell产生一个“scp”进程。 似乎SFTP通常也是如此,如果不是特殊的“internal-sftp”处理程序。

所以,我想我的问题是:是否有一种方法可以达到与“internal-sftp”相同的效果,但对于SCP而言,却不使用像scponly和rssh这样的第三方工具? “internal-sftp”的真正好处在于它不需要build立一个支持文件的监狱,也不需要处理潜在可利用的第三方setuid二进制文件(特别是具有漏洞利用历史的rssh)。

    恐怕OpenSSH没有什么特别简单或可靠的,因为你观察到有一个内置的SFTP服务器,但没有内置的SCP服务器。

    警告:文斯·伯克(Vince Berk)的build议不利于多种原因:

    1. shell的启动文件行为可能受到环境variables的影响,SSH根据服务器configuration可以远程设置。
    2. 用户可以运行ssh / bin / bash并获得一个shell。 它不会有tty,所以使用起来不方便,但是… …更不用说他可以运行的所有其他程序了,你可能不希望他这么做。
    3. 如果用户只需要执行“ssh host rm -f .bash_profile”,那么更改.bash_profile的权限就没什么用处了。 关于主目录权限没有提及。

    … 等等。 这种方法太脆弱了。

    看一看rssh ,它是一个允许有限访问系统的替代shell。

    rssh是一个受限制的shell,用于通过ssh(1)提供对主机的有限访问,允许其shellconfiguration为rssh的用户使用一个或多个命令scp(1),sftp(1)cvs ),rdist(1)和rsync(1),只有那些命令。

    您可以使用rssh.conf文件configuration可以在每个用户或系统范围基础上使用哪些命令

    或者,你可以使用scponly来做你想做的事情。 它充当ssh套件的包装,允许文件传输,但不能访问shell。

    你需要通过SSH来做到这一点?

    如果你可以尝试设置他们的shell:

     /usr/libexec/openssh/sftp-server 

    并确保你将上面添加到/ etc / shells中

    如果您想使用内置帐户解耦,则可以设置proftpd

    我使用proftpd设置了一个安全的SFTP。 编译proftpd就像这样:

    ./configure –prefix = / usr –sysconfdir = / etc –with-modules = mod_sftp

    可以使用下面的这篇文章,以及一些关于如何设置它的谷歌:

    http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html

    这是一个关于如何执行这个服务器端的技巧。 将用户的shell设置为bash:

     usermod -S /bin/bash [username] 

    现在,在他们的homedir中创build一个'.bash_profile',其中包含以下行:

     [ -n "$PS1" ] && exit 

    这会导致非交互式会话(如“scp”)继续。 但是,如果他们尝试“ssh”login,则会调用“exit”,并closures连接。

    确保他们不能'sftp'一个新的'.bash_profile'到他们的主目录!

     chown root:root .bash_profile 

    希望有所帮助!