OpenSSH 类似于“内部 sftp”,但对于 SCP?

bri*_*hen 19 ssh jail chroot sftp scp

我正在运行 Debian stable,我希望为我的 'sftponly' 组中的用户建立以下环境:

  • 入狱
  • 可以用SFTP传输
  • 可以用SCP转移
  • 无法使用 SSH 交互登录

从我的实验和研究来看,sshd_config 中的以下节似乎让我达到了 90%:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

这给了我监禁的 SFTP 而没有 SSH,这很好。但它也禁用了 SCP,这不太理想,因为很多客户端是使用 SCP 而不是 SFTP 的遗留脚本进程(我们正在替换的服务器支持这两种协议),并且因为这些客户端不受我们的控制并且很容易修改后,完全禁用 SCP 可能不切实际。

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

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

小智 -1

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

usermod -S /bin/bash [username]
Run Code Online (Sandbox Code Playgroud)

现在在他们的 homedir 中创建一个包含以下行的“.bash_profile”:

[ -n "$PS1" ] && exit
Run Code Online (Sandbox Code Playgroud)

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

确保他们无法将新的“.bash_profile”“sftp”到他们的主目录中!

chown root:root .bash_profile
Run Code Online (Sandbox Code Playgroud)

希望有帮助!