防止文件上传时被访问

防止文件上传时被访问

如果我将一个大文件上传到 FTP 服务器,该文件是否会立即出现在目标文件系统中,并且是否有可能在传输完成之前被另一方访问?

如果是的话,有哪些方法可以防止在传输完成之前读取文件?

答案1

这将完全取决于您的特定服务器实现行为,并且没有完全定义在RFC959

一般来说,文件在服务器上不可用,直到它的上传返回226,它的状态为150。如果文件尚未完全上传,它的状态响应将不会是550,并且它不会将文件传输到客户端。

为了做到这一点,STOU 动词将在 EOF 字节到达时知道文件上传完成,因此此时整个文件已上传,因此它返回 226。

接收verb 将首先返回所请求文件的状态。如果文件处于可接受状态,则预计响应 150,然后将开始传输。

此外,请记住,大多数服务器服务都是作为多线程应用程序实现的,文件的线程安全通常依赖于文件系统和服务器操作系统对文件的锁定。在大多数平台上,当正在主动写入文件时,其他线程无法读取或写入该文件,直到锁定被释放。

答案2

理论上,FTP 服务器可能会锁定上传的文件,以防止其他进程或其他 FTP 连接访问。

实际上,这种情况不会发生在 *nix 服务器上。我已经在 CentOS 上使用 PureFTPD 和 ProFTPD(最广泛使用的 *nix FTP 服务器)对此进行了测试。使用这两种服务器,没有什么可以阻止您下载不完整的文件。

另一方面,Windows IIS FTP 服务器确实锁定了上传的文件。在 IIS 6.2(Windows 8.1)上进行了测试。

有关解决方法,请参阅我的回答FileZilla 上传不是原子的

答案3

如果您的 FTP 服务器允许类似于 ProFTPD 的隐藏存储的功能,您可能想要尝试一下。

HiddenStores 指令支持两步文件上传:文件以“.in.filename.”的形式上传,上传完成后重命名为“filename”。这提供了一定程度的原子性,有助于防止 1) 上传不完整和 2) 文件在上传过程中被使用。

来源 :http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html

相关内容