![OpenSSH 与‘internal-sftp’类似,但是适用于 SCP 吗?](https://linux22.com/image/593720/OpenSSH%20%E4%B8%8E%E2%80%98internal-sftp%E2%80%99%E7%B1%BB%E4%BC%BC%EF%BC%8C%E4%BD%86%E6%98%AF%E9%80%82%E7%94%A8%E4%BA%8E%20SCP%20%E5%90%97%EF%BC%9F.png)
我正在运行 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
答案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 的回答这样做有很多坏处:
与启动文件相关的 shell 行为可能会受到环境变量的影响,SSH 可以根据服务器配置远程设置环境变量。
用户只需运行
ssh /bin/bash
并获取 shell 即可。它没有 tty,因此使用起来不方便,但那又怎么样……更不用说他可以运行的所有其他程序,而您可能不希望他运行这些程序。.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。