我正在运行Debian stable,我正在寻找为我的'sftponly'组中的用户build立以下环境:
从我的实验和研究来看,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议不利于多种原因:
… 等等。 这种方法太脆弱了。
看一看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
希望有所帮助!