OpenSSH 与‘internal-sftp’类似,但是适用于 SCP 吗?

OpenSSH 与‘internal-sftp’类似,但是适用于 SCP 吗?

我正在运行 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 通常也会如此。

所以,我想我的问题是:有没有办法实现与 'internal-sftp' 相同的效果,但对于 SCP,无需使用第三方工具,如 scponly 和 rssh?'internal-sftp' 真正好的地方在于它不需要设置带有支持文件的 jail,也不需要处理可能被利用的第三方 setuid 二进制文件(特别是 rssh,有被利用的历史)。

答案1

看一眼发送这是允许有限访问系统的替代 shell。

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

您可以使用以下方式配置哪些命令可以在每个用户或整个系统范围内使用:rssh配置文件文件

或者你可以使用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

可以使用下面这篇文章,以及谷歌上的更多有关如何设置的信息:

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

答案3

恐怕 OpenSSH 并没有类似简单或可靠的东西,因为正如您所观察到的,它有一个内置的 SFTP 服务器,但没有内置的 SCP 服务器。

警告:Vince Berk 的回答这样做有很多坏处:

  1. 与启动文件相关的 shell 行为可能会受到环境变量的影响,SSH 可以根据服务器配置远程设置环境变量。

  2. 用户只需运行ssh /bin/bash并获取 shell 即可。它没有 tty,因此使用起来不方便,但那又怎么样……更不用说他可以运行的所有其他程序,而您可能不希望他运行这些程序。

  3. .bash_profile如果用户只能执行,那么更改 的权限没有什么用ssh host rm -f .bash_profile。没有提到有关主目录权限的内容。

…等等。这种方法实在是太脆弱了。

答案4

这是一个第三方工具,不在问题范围内,但我认为无论如何它值得一提。

监狱套件:https://olivier.sessink.nl/jailkit/

它有一系列工具,可轻松设置用户监狱 - 将二进制文件和库复制到监狱,并设置从监狱内部到操作系统的日志记录。我使用它构建了 sftp/scp/rsync-only chroots。

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

相关内容