为什么有两种通过OpenSSH设置SFTP的方法以及何时使用哪种方法?他们之间有什么区别吗? >
Subsystem sftp /usr/lib/openssh/sftp-server


Subsystem sftp internal-sftp


#1 楼

sftp-serverinternal-sftp都是OpenSSH的一部分。 sftp-server是独立的二进制文件。 internal-sftp只是一个配置关键字,告诉sshd使用内置在sshd中的SFTP服务器代码,而不是运行另一个进程(通常是sftp-server)。在2008年?)比独立的internal-sftp二进制文件高。但这是目前的默认设置。 sftp-server现在是冗余的,可能为了向后兼容而保留。
我相信没有理由将sftp-server用于新安装。几乎一样。它们是使用相同的源代码构建的。
sftp-server的主要优点是,与sftp-server指令一起使用时不需要支持文件。
internal-sftp手册页中的语录: />
对于internal-sftp指令:

命令ChrootDirectory实现了SFTP文件传输子系统。服务器。这可以简化使用sshd_config(5)强制在客户端上使用不同文件系统根目录的配置。



对于Subsystem指令:与sftp-server一起使用时不需要支持文件的进程内SFTP服务器。



对于internal-sftp指令:

ChrootDirectory必须包含必要的文件和目录以支持用户的会话。对于交互式会话,这至少需要一个外壳,通常是ForceCommand和基本internal-sftp节点,例如ChrootDirectoryChrootDirectoryChrootDirectorysh/devnull设备。对于使用SFTP的文件传输会话,如果使用进程内sftp-server,则无需进行其他环境配置,尽管使用日志记录的会话可能在某些操作系统的chroot目录中需要zero(有关详细信息,请参阅stdin)。 />


stdout的另一个优点是性能,因为不需要为其运行新的子进程。

stderr遇到tty时可以自动使用/dev/log,因为功能相同,并且sftp-server甚至具有上述优点。但是在某些情况下,会有差异。
很少有示例:


管理员可能依赖登录shell配置来阻止某些用户登录。切换到internal-sftp



将绕过此限制。


使用sshd二进制文件(作为独立进程),您可以使用一些技巧,例如在internal-sftp下运行SFTP。对于SSH-1(如果有人仍在使用它),根本不涉及sftp-server指令。使用SSH-1的SFTP客户端会明确告知服务器该服务器应运行的二进制文件。因此,旧版SSH-1 SFTP客户端使用硬编码的internal-sftp名称。



#2 楼

存在可以与OpenSSH一起使用的替代SFTP实现:


http://www.greenend.org.uk/rjk/sftpserver/
https:// github .com / mysecureshell / mysecureshell


#3 楼


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

command="/usr/libexec/openssh/sftp-server" ssh-rsa AAAA…== user@host.com



尝试执行其他任何操作都会挂起:

$ sftp host:/etc/group /tmp
Connecting to host...
Fetching /etc/group to /tmp/group
/etc/group                                    100%  870     0.9KB/s   00:00



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

评论


ForceCommand internal-sftp应该实现相同

–ptman
16年9月9日在7:13

方便的是,没有chroot,您可以使用sshfs host:/home/user/.ssh〜/ hackme将所有这些设置重新编辑以打开访问权限(如果以后改变主意)。

–sh1
17年9月23日在6:15

@ sh1更重要的一点是,如果要将用户仅锁定到他们自己的.ssh / authorized_keys文件中的sftp,则最好确保将他们chroot到不是.ssh的位置可以访问,或者他们可以用更多的权限替换其authorized_keys文件

–丹尼尔·法瑞尔(Daniel Farrell)
19年11月21日在14:51

#4 楼

如果您只想锁定一个帐户以仅使用SFTP,则只需为其帐户提供默认的shell / sbin / nologin

评论


OP实际上提出了完全不同的要求。

– Piotr P. Karwasz
19/12/30在20:08