在我的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,但用户无法访问其主目录。SFTP
WinSCP
Chroot
我不确定如何强制或调用 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
,可能只是需要更多的设置。