有没有办法使用 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 客户端中的命令)。