当客户端连接到 SFTP 服务器以获取文件时,通常是使用授予运行 SFTP 客户端的帐户的权限从主机系统读取文件,还是使用授予运行 SFTP 服务器的帐户的权限从主机系统读取文件?
如果是前者,则客户端确定可用的文件,这对我来说很有意义,但如果是后者,则服务器必须能够访问所有要提供的文件,并且任何客户端都可以获取每个文件。
我想尝试一下,但我无法访问相关的 SFTP 版本(Control-M 管理文件传输服务),但供应商告诉我,就他们的情况而言,是后者。
这更多是关于一个运行良好的 SFTP 服务器应该如何工作,而不是任何特定实现的细节。
答案1
该文件通常是使用授予运行 SFTP 客户端的帐户的权限从主机系统读取的,还是使用授予运行 SFTP 服务器的帐户的权限从主机系统读取的?
永远不是前者。有时是后者,但通常是两者都不。
SFTP 服务器对客户端的环境一无所知。它唯一知道的就是你提供的凭证——用户名被映射到 SFTP 服务器端的一个帐户,而该帐户以某种方式决定了你的权限。
在大多数情况下,SFTP 服务器都是使用系统目标机器上的帐户,因为 SFTP 实际上是 SSH 的子协议(不要与 FTPS 混淆,它不是)并且许多 SFTP 服务器实现都是功能齐全的 SSH 服务器。
因此,尽管典型的 SFTP(SSH)服务器最初以高权限帐户运行,但它会使用您提供的用户名来将其进程切换到相应的操作系统帐户从那时起,该连接仅具有服务器上指定帐户通常具有的权限,服务器的操作系统内核强制执行访问检查。
(例如,OpenSSHsshd
最初以 root 身份运行,但只要您以“pat”身份进行身份验证,您就会与在“pat”帐户下运行的 SFTP 服务器进程对话。)
服务器必须能够访问所有要提供的文件,并且任何客户端都可以获取每个文件。
但是如果你正在处理一个特殊用途的 SFTP 服务器,该服务器在普通操作系统帐户下运行,并根据其内部帐户数据库(即“虚拟帐户”)验证用户凭据,这仍然并不意味着所有 SFTP 客户端都具有相同的权利。
这只意味着最大限度任何客户端的可能权限都不会高于运行 SFTP 服务器的帐户的权限——但是,SFTP 服务器本身可以在此基础上实施额外的限制。毕竟,客户端命令仍然首先由 SFTP 服务器的代码处理——它们不会直接进入服务器的操作系统——因此它仍然可以完美地将不同的规则应用于各个客户端。
(例如,在 FileZilla Server 中 - 它提供 FTP/FTPS 服务,而不是 SFTP,但概念仍然相同 - 实际的服务器进程作为单个帐户执行所有文件操作,并使用与 OS 帐户无关的虚拟 FTP 帐户,但它仍然允许配置每个帐户可以或不能访问哪些路径以及允许哪些操作。)
因此,在您的特定示例中,Control-M 文件传输服务器似乎可以双向工作:它可以直接使用 Windows 帐户(我假设在操作系统级别切换到其权限),也可以使用内部帐户(通过其自己的代码应用限制)。但在所有情况下,它都基于明确提供的登录详细信息,而不会隐式地基于客户端帐户。