OpenSSH:内部SFTP和SFTP服务器之间的区别


81

为什么有两种通过OpenSSH设置SFTP的方法以及何时使用?它们之间有什么区别吗?

我的意思是第一个使用的是来自OpenSSH的库,第二个则说“使用内部”,所以它也是OpenSSH吗?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Answers:


94

两者sftp-serverinternal-sftp都是OpenSSH的一部分。sftp-server是一个独立的二进制文件。internal-sftp只是一个配置关键字,告诉sshd使用内置的SFTP服务器代码sshd,而不是运行另一个进程(通常是sftp-server)。


从功能的角度,sftp-server并且internal-sftp几乎是相同的。它们是从相同的源代码构建的。

其主要优点internal-sftp是,与ChrootDirectory指令一起使用时不需要支持文件。

sshd_config(5)手册页中的引号:

  • 对于Subsystem指令

    该命令sftp-server实现SFTP文件传输子系统。

    或者,该名称internal-sftp实现一个进程内SFTP服务器。这可以简化ChrootDirectory用于在客户端上强制使用不同文件系统根目录的配置。

  • 对于ForceCommand指令

    指定的命令internal-sftp将强制使用进程内SFTP服务器,该服务器与配合使用时不需要支持文件ChrootDirectory

  • 对于ChrootDirectory指令

    ChrootDirectory必须包含必要的文件和目录,以支持用户的会话。用于交互式会话,这需要至少一个壳,典型地sh,和基本/dev如节点nullzerostdinstdoutstderr,和tty设备。对于使用SFTP的文件传输会话,如果使用进程内sftp-server,则不需要对环境进行其他配置,尽管使用日志记录的会话可能需要/dev/log在某些操作系统的chroot目录中(请参阅sftp-server详细信息)。

internal-sftp性能的另一个优点是性能,因为不需要为其运行新的子流程。


internal-sftp是(在2008年的OpenSSH 4.9p1?)不是独立的添加更晚sftp-server的二进制,但它是默认的现在。

我相信没有理由将其sftp-server用于新安装。


似乎sshd可以internal-sftp在遇到时自动使用,sftp-server因为功能相同,internal-sftp甚至具有上述优势。但是在某些情况下,会有差异。

几个例子:

  • 管理员可以依靠登录外壳程序配置来阻止某些用户登录。切换到,internal-sftp将绕过该限制,因为不再涉及登录外壳程序。

  • 使用sftp-server二进制文件(作为一个独立的进程),您可以使用一些技巧,例如在下运行SFTPsudo

  • 对于SSH-1(如果有人仍在使用它),Subsystem指令完全不涉及。使用SSH-1的SFTP客户端会明确告知服务器该服务器应运行的二进制文件。因此,旧的SSH-1 SFTP客户端具有sftp-server硬编码的名称。



6

您可以将authorized_key锁定到外部sftp服务器。

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。

las,除非修改sshd_config,否则没有简单的方法将密钥锁定到chroot。对于用户而言,无需系统管理者的干预就可以做到。


3
ForceCommand internal-sftp应该达到相同的效果
ptman

方便的是,没有chroot,sshfs host:/home/user/.ssh ~/hackme如果以后改变主意,则可以使用所有这些设置重新编辑以打开访问权限。
sh1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.