为什么有两种使用 OpenSSH 设置 SFTP 的方法以及何时使用哪种方法?它们之间有什么区别吗?
我的意思是第一个使用来自 OpenSSH 的库,第二个说“使用内部”,所以它也是 OpenSSH?
Subsystem sftp /usr/lib/openssh/sftp-server
Run Code Online (Sandbox Code Playgroud)
Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)
Mar*_*ryl 135
这两个sftp-server和internal-sftp是OpenSSH的一部分。这sftp-server是一个独立的二进制文件。这internal-sftp只是一个配置关键字,它告诉sshd使用内置于 的 SFTP 服务器代码sshd,而不是运行另一个进程(通常是sftp-server)。
将internal-sftp在更晚(的OpenSSH 4.9p1 2008年?)比独立添加sftp-server二进制文件。但它现在是默认设置。现在sftp-server是多余的,保留可能是为了向后兼容。
我相信没有理由将sftp-server用于新安装。
从功能的角度来看,sftp-server和internal-sftp几乎相同。它们是从相同的源代码构建的。
的主要优点internal-sftp是,与ChrootDirectory指令一起使用时不需要支持文件。
来自sshd_config(5)手册页的引用:
对于Subsystem指令:
该命令
sftp-server实现了 SFTP 文件传输子系统。或者,该名称
internal-sftp实现了一个进程内 SFTP 服务器。这可以简化使用ChrootDirectory在客户端上强制不同文件系统根的配置。
指定命令
internal-sftp将强制使用进程内 SFTP 服务器,当与ChrootDirectory.
在
ChrootDirectory必须包含必要的文件和目录,以支持用户的会话。用于交互式会话,这需要至少一个壳,典型地sh,和基本/dev如节点null,zero,stdin,stdout,stderr,和tty设备。对于使用 SFTP 的文件传输会话,如果使用进程内 sftp-server,则不需要额外的环境配置,尽管使用日志记录的会话可能需要/dev/log在某些操作系统上的 chroot 目录中(请参阅sftp-server有关详细信息)。
的另一个优点internal-sftp是性能,因为没有必要为其运行新的子流程。
看起来似乎sshd可以internal-sftp在遇到 时自动使用sftp-server,因为功能相同并且internal-sftp甚至具有上述优点。但也有边缘情况,其中存在差异。
几个例子:
管理员可以依靠登录外壳配置来阻止某些用户登录。切换到internal-sftp将绕过限制,因为不再涉及登录外壳。
使用sftp-server二进制文件(作为一个独立进程),您可以使用一些技巧,例如在sudo.
对于 SSH-1(如果有人仍在使用它),Subsystem根本不涉及指令。使用 SSH-1 的 SFTP 客户端明确告诉服务器服务器应该运行什么二进制文件。因此,旧版 SSH-1 SFTP 客户端的sftp-server名称是硬编码的。
存在可与 OpenSSH 一起使用的替代 SFTP 实现:
小智 6
您可以将一个authorized_key 锁定到外部sftp-server。
command="/usr/libexec/openssh/sftp-server" ssh-rsa AAAA…== user@host.com
当您这样做时,您的用户可以 sftp,但不能 scp 或 ssh:
$ sftp 主机:/etc/group /tmp 正在连接到主机... 获取 /etc/group 到 /tmp/group /etc/group 100% 870 0.9KB/s 00:00
尝试做任何其他事情只会挂起:
$ scp 主机:/etc/group /tmp 被信号 2 杀死。 $ ssh 主机正常运行时间 被信号 2 杀死。
唉,除非修改 sshd_config,否则没有简单的方法可以将密钥锁定到 chroot。对于用户来说,无需系统管理员的干预就能够做到这一点真的很酷。
| 归档时间: |
|
| 查看次数: |
159790 次 |
| 最近记录: |