OpenSSH类似于'internal-sftp'的东西,但是对于SCP?


16

我正在运行Debian稳定版,并且希望为我的“ sftponly”组中的用户建立以下环境:

  • 入狱
  • 可以通过SFTP传输
  • 可以和SCP一起转移
  • 无法使用SSH交互式登录

通过我的实验和研究,似乎sshd_config中的以下节使我达到了90%:

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

这使我入狱的SFTP却没有SSH,这很好。但这也会禁用SCP,这并不理想,因为有很多客户端是使用SCP而不是SFTP(我们要替换的服务器同时支持这两种协议)的旧式,脚本化进程,并且由于这些客户端不受我们的控制并且很容易修改后,完全禁用SCP可能不切实际。

有意义的是,此配置将禁用SCP,因为传入的SCP连接导致sshd通过用户的登录shell(即该用户)生成“ scp”进程。如果不是特殊的“ internal-sftp”处理程序,似乎SFTP通常也是如此。

因此,我想我的问题是:除了SCP之外,是否有一种方法可以达到与“ internal-sftp”相同的效果,而不必诉诸于使用诸如scponly和rssh之类的第三方工具?关于“ internal-sftp”的真正好处是,它不需要建立带有支持文件的监狱,也不需要处理可能被利用的第三方setuid二进制文件(特别是rssh,具有漏洞利用历史)。


1
客户端是使用ssh密钥文件进行连接还是使用密码?如果它是密钥文件,则可以限制其功能。
珍妮D

他们正在使用密码进行连接。
brianjcohen 2012年

Answers:


3

看一下rssh,它是允许对系统的有限访问的替代外壳。

rssh是受限制的外壳程序,用于通过ssh(1)提供对主机的受限访问,从而允许其外壳程序配置为rssh的用户使用一个或多个命令scp(1),sftp(1)cvs(1) ),rdist(1)和rsync(1),以及仅这些命令。

您可以使用rssh.conf文件配置可以在每个用户或系统范围内使用的命令

或者您可以使用scponly做你想要什么。它充当ssh套件的包装器,并允许文件传输,但不允许shell访问。


2

您是否需要通过ssh执行此操作?

如果您可以尝试将其shell设置为:

/usr/libexec/openssh/sftp-server

并确保将以上内容添加到/ etc / shells中

如果要与使用内置帐户脱钩,可以设置proftpd

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

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

可以在下面使用这篇文章,以及在Google上更多有关如何设置它的文章:

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


2

恐怕与OpenSSH相比,没有什么比这容易或可靠的了,因为正如您所观察到的那样,它具有内置的SFTP服务器,但没有内置的SCP服务器。

警告:Vince Berk的建议很糟糕,原因有很多:

  1. Shell关于启动文件的行为可能受到环境变量的影响,SSH可以根据服务器配置远程设置。
  2. 用户只需运行ssh / bin / bash并获取一个shell。它没有tty,因此使用起来很不方便,但是那又怎样……更不用说他可以运行的所有其他程序了,您大概不希望他这样做。
  3. 如果用户只能执行“ ssh host rm -f .bash_profile”,则更改.bash_profile的权限几乎没有用。没有提及主目录权限。

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


0

这是第三方工具,不在问题范围内,但是我认为仍然值得一提。

监狱工具:https ://olivier.sessink.nl/jailkit/

它具有一系列工具,可轻松设置用户监狱-将二进制文件和库复制到监狱,以及从监狱内部设置日志到OS。我用它来构建sftp / scp / rsync-only chroots。

它还带有jk_lsh(jailkit受限外壳),可在监狱外使用,以限制用户可以运行的命令,例如,如果您只想允许不带chroot的scp / sftp / rsync。


-1

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

usermod -S /bin/bash [username]

现在在其主目录中创建带有以下行的“ .bash_profile”:

[ -n "$PS1" ] && exit

这将导致非交互式会话(如“ scp”)继续进行。但是,如果他们尝试“ ssh”登录,则将调用“ exit”,并关闭连接。

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

chown root:root .bash_profile

希望有帮助!


这种方法似乎没有考虑到监狱的要求。
brianjcohen 2012年

是的,不幸的是,您将不得不为'scp'端创建一个手动chroot环境,与sshd_config中提供的chroot目录重叠,并对要限制的每个用户执行上述操作。“ scp”不适用于内部sftp服务器。
文斯·伯克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.