为什么有两种使用 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
两者都是 OpenSSH 的一部分
sftp-server
。internal-sftp
这sftp-server
是一个独立的二进制文件。这internal-sftp
只是一个配置关键字,它告诉sshd
使用内置于 中的 SFTP 服务器代码sshd
,而不是运行另一个进程(通常是sftp-server
)。与独立二进制文件相比,它的
internal-sftp
添加要晚得多(2008 年的 OpenSSH 4.9p1?) 。sftp-server
但它现在是默认值。现在sftp-server
是多余的,可能是为了向后兼容而保留的。我相信没有理由将其
sftp-server
用于新安装。从功能的角度来看,
sftp-server
和internal-sftp
几乎相同。它们是从相同的源代码构建的。的主要优点是,它与指令
internal-sftp
一起使用时不需要支持文件。ChrootDirectory
sshd_config(5)
手册页中的引用:对于
Subsystem
指令:对于
ForceCommand
指令:对于
ChrootDirectory
指令:的另一个优点
internal-sftp
是性能,因为不需要为它运行新的子流程。看起来 ,遇到 , 时
sshd
会自动使用, 因为功能是相同的 ,甚至具有上述优点。但也有一些极端情况,其中存在差异。internal-sftp
sftp-server
internal-sftp
几个例子:
管理员可以依靠登录 shell 配置来阻止某些用户登录。切换到
internal-sftp
将绕过限制,因为不再涉及登录 shell。使用
sftp-server
二进制文件(作为一个独立进程),您可以使用一些技巧,例如在sudo
.对于 SSH-1(如果有人仍在使用它),
Subsystem
根本不涉及指令。使用 SSH-1 的 SFTP 客户端明确告诉服务器服务器应该运行什么二进制文件。因此,旧版 SSH-1 SFTP 客户端的sftp-server
名称是硬编码的。存在可以与 OpenSSH 一起使用的替代 SFTP 实现:
您可以将授权密钥锁定到外部 sftp 服务器。
当您这样做时,您的用户可以 sftp,但不能 scp 或 ssh:
尝试做任何其他事情只会挂起:
唉,除非修改了 sshd_config,否则没有简单的方法可以将密钥锁定到 chroot。对于用户来说,无需系统管理员的干预就能够做到这一点真的很酷。
如果您只想锁定一个帐户以仅使用 SFTP,只需为其帐户提供默认 shell /sbin/nologin