在 ForceCommand 脚本中的 ChrootDirectory 之后将 internal-sftp 作为 shell 调用进行调用

在 ForceCommand 脚本中的 ChrootDirectory 之后将 internal-sftp 作为 shell 调用进行调用

在我的SSH / SFTP实现中,对于某一组用户,我希望所述用户在登录后被限制在他们的home文件夹中,并在授予访问权限之前检查一些其他条件SFTP

将用户限制到他们的主目录很简单,我添加了:

Match group <someGroup>
ChrootDirectory     %h
ForceCommand internal-sftp

然而,进入第二部分,我想检查某些情况,这涉及用脚本internal-sftp替换。ForceCommand

在脚本中,检查之后:

sh -c $SSH_ORIGINAL_COMMAND

解析为,因为这是任何客户端(例如 )/usr/libexec/openssh/sftp-server发送的请求(可能是默认的..)。虽然用户可以使用 SFTP,但用户无法访问其主目录。SFTPWinSCPChroot

我不确定如何强制或调用 shell 脚本中的internal-sftp命令和Chroot-ing用户%HOME。如果确实可以,我该怎么做?

更新

根据以下答案,我尝试将所需的系统文件复制到Chroot目录,并调用$SSH_ORIGINAL_COMMAND我的脚本。

sshd_config

Match group <somegroup>
ChrootDirectory     %h
ForceCommand    /usr/local/bin/testssh.sh

testssh.sh script

#! /bin/bash
sh -c $SSH_ORIGINAL_COMMAND

ChrootDirectory (user home, complete path owned by root)

Contents
/bin
/etc
/lib

但是,用户仍然无法启动 sftp 会话。可能还需要什么?

答案1

你不能。

internal-sftp是配置关键字,而不是二进制文件。它指示sshd运行内置的 SFTP 服务器sshd。您无法从 shell 命令回调正在运行的进程。

我认为sftp-server二进制文件是专门为这种internal-sftp无法使用的场景保留的。请参阅我的回答OpenSSH:internal-sftp 和 sftp-server 之间的区别

您应该能够做到这一点sftp-server,可能只是需要更多的设置。

相关内容