我使用mod-sql来安装新鲜的ubuntu 14.04(OpenSSH + LAMP)apt上的ProFTP用户login。 我为每个用户从sql表中的configuration设置ftp文件夹。 并允许用户通过在configuration中设置AllowStoreRestart on来恢复上传文件。
一切工作正常。 用户可以上传/下载他们的文件夹中的pipe理文件。 如果用户在filezilla中停止上传队列,则可以稍后恢复。
但是,当互联网连接不稳定的客户端。 互联网连接closures后,有时候还在上传的文件将从服务器上的文件夹中消失。
经过调查,我发现所有消失的文件都有这样的错误
[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 -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.conf中
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/
PS
经过大量的研究和testing。 罪魁祸首是AppArmor。 通常情况下,它工作得很好。 只有一些情况发生,AppArmor有时会从断开的连接中删除文件。 我无法find具体的模式或configuration导致这个问题,因为有时相同的行动有时文件删除,有时不。 但是,禁用AppArmor后,我不觉得这个问题了。
要禁用下面的apparmor运行命令:
service apparmor stop update-rc.d -f apparmor remove apt-get remove apparmor apparmor-utils