为什么有两种通过OpenSSH设置SFTP的方法以及何时使用?它们之间有什么区别吗?
我的意思是第一个使用的是来自OpenSSH的库,第二个则说“使用内部”,所以它也是OpenSSH吗?
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
为什么有两种通过OpenSSH设置SFTP的方法以及何时使用?它们之间有什么区别吗?
我的意思是第一个使用的是来自OpenSSH的库,第二个则说“使用内部”,所以它也是OpenSSH吗?
Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Answers:
两者sftp-server
和internal-sftp
都是OpenSSH的一部分。sftp-server
是一个独立的二进制文件。internal-sftp
只是一个配置关键字,告诉sshd
使用内置的SFTP服务器代码sshd
,而不是运行另一个进程(通常是sftp-server
)。
从功能的角度,sftp-server
并且internal-sftp
几乎是相同的。它们是从相同的源代码构建的。
其主要优点internal-sftp
是,与ChrootDirectory
指令一起使用时不需要支持文件。
对于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
性能的另一个优点是性能,因为不需要为其运行新的子流程。
该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
硬编码的名称。
存在可以与OpenSSH一起使用的替代SFTP实现:
您可以将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。对于用户而言,无需系统管理者的干预就可以做到。
sshfs host:/home/user/.ssh ~/hackme
如果以后改变主意,则可以使用所有这些设置重新编辑以打开访问权限。
ForceCommand internal-sftp
应该达到相同的效果