Ubuntu ProFTP 在客户端连接失败后删除部分上传的文件

Ubuntu ProFTP 在客户端连接失败后删除部分上传的文件

我在全新的 ubuntu 14.04 (OpenSSH+LAMP) 上通过 apt 安装 ProFTP,并使用 mod-sql 进行用户登录。我从 sql 表中的配置为每个用户设置 ftp 文件夹。并允许用户通过配置中的设置恢复上传文件AllowStoreRestart on

一切正常。用户可以上传/下载其文件夹中的管理文件。如果用户在 filezilla 中停止上传队列,他们可以稍后恢复。

但是,当客户端的网络连接不稳定时,网络连接中断后,有时仍在上传的文件会从服务器上的文件夹中消失。

经过调查,我发现所有消失的文件都出现了这样的错误

[13/Jul/2014:14:15:37 +0000] 110.xx.xx.xx username STOR  426  2196991 788.205 Timeout exceeded: TimeoutStalled during data transfer  failed Data connection closed

或者

[13/Jul/2014:14:11:48 +0000] 110.xx.xx.xx username STOR  426  675945 211.340 Read EOF from client  failed Data connection closed

然后,该文件将从文件夹中消失,filezilla 将尝试再次从第一个字节上传。我重新检查了 xferlog,没有发现任何来自客户端的删除请求,只是上传消息不完整。

  • 有人知道为什么部分上传的文件从上传文件夹中消失吗?
  • 如何防止proftpd的这种行为?

服务器版本

# proftpd -v
ProFTPD Version 1.3.5rc3
# uname -a
Linux testftp 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# mysql -V
mysql  Ver 14.14 Distrib 5.5.37, for debian-linux-gnu (x86_64) using readline 6.3

proftpd配置文件

Include /etc/proftpd/modules.conf
UseIPv6                         on
IdentLookups                    off
ServerName                      "Debian"
ServerType                      standalone
DeferWelcome                    off
MultilineRFC2228                on
DefaultServer                   on
ShowSymlinks                    on
TimeoutNoTransfer               600
TimeoutStalled                  600
TimeoutIdle                     1200
DisplayLogin                    welcome.msg
DisplayChdir                    .message true
ListOptions                     "-l"
DenyFilter                      \*.*/
RootLogin                       off
DefaultRoot                     ~
RequireValidShell               off
Port                            21
<IfModule mod_dynmasq.c>
</IfModule>
MaxInstances                    30
User                            proftpd
Group                           nogroup
Umask                           022  022
AllowOverwrite                  on
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log
<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>
<IfModule mod_ratio.c>
Ratios off
</IfModule>
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
Include /etc/proftpd/sql.conf
AllowStoreRestart on
Include /etc/proftpd/conf.d/

附言

  • 通常情况下,传输到该服务器的文件超过 5GB。

答案1

经过大量的研究和测试。罪魁祸首是 AppArmor。通常情况下,它工作得很好。只有在某些情况下,AppArmor 有时会从断开的连接中删除文件。我找不到导致此问题的特定模式或配置,因为使用相同的操作有时文件会删除,有时不会。但是,禁用 AppArmor 后,我再也没有发现这个问题了。

要禁用 apparmor,请运行以下命令:

service apparmor stop 
update-rc.d -f apparmor remove 
apt-get remove apparmor apparmor-utils

相关内容