服务器端 cd 在 sftp 客户端连接上

服务器端 cd 在 sftp 客户端连接上

有没有办法使用 sftp 在服务器端配置它以在客户端连接时运行 cd 命令?

我已将我的用户置于 chroot 中,该文件夹必须为 root:root chowned 并且不能由任何其他用户写入,chroot 中有由 sftp 用户拥有的子文件夹。

我想做的是,当用户连接时,从 jail 中的服务器端将用户 cd 到他们的文件夹中,以避免每次连接时都必须这样做的烦恼。这可能吗?

答案1

OpenSSH 使用一个名为的程序sftp-server来处理 SFTP 会话的服务器端。Sftp-server 可以选择-d指定用户的起始目录,作为其主目录的替代。请参阅sftp 服务器手册页

如果你使用典型的SFTP chroot 监狱设置,你的 sshd_config 中可能有一行:

ForceCommand internal-sftp

这将sshd运行 sshd 程序内置的 sftp-server 代码副本。您可以向此行添加命令行参数,就像独立 sftp-server 程序的命令行参数一样。例如:

Match User jdoe
    ChrootDirectory /var/jdoe-root
    ForceCommand internal-sftp -d /jdoe-homedir

当“jdoe”登录时,他将被 chroot 到/var/jdoe-root,并且他的会话的起始目录将是/var/jdoe-root/jdoe-homedir

答案2

SFTP 协议/会话是无状态的。与 shell 或 FTP 相反,SFTP 没有工作目录的概念。任何工作目录的幻觉都是由 SFTP 客户端模拟的。

因此您无法在服务器端强制执行它。

请注意,FTP 协议中有CWD命令(由典型 FTP 客户端的命令在后台使用cd),但 SFTP 协议中没有类似的命令(实际上是指协议,而不是cd典型 SFTP 客户端中的命令)。

相关内容