Я устанавливаю ProFTP из apt на свежий ubuntu 14.04 (OpenSSH + LAMP) с mod-sql для входа пользователя. Я установил папку ftp для каждого пользователя из config в таблице sql. И разрешить пользователю возобновить загрузку файла, установив 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 -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/
P.S.
После долгих исследований и испытаний. Виновник - AppArmor. Обычно все работает нормально. Возникает только какое-то условие, что AppArmor иногда удаляет файл из разорванного соединения. Мне не удалось найти конкретный шаблон или конфигурацию, вызывающую эту проблему, потому что с помощью одного и того же действия иногда файл удаляется, а иногда нет. Однако после отключения AppArmor я больше не обнаружил этой проблемы.
Чтобы отключить apparmor, выполните следующие команды:
service apparmor stop
update-rc.d -f apparmor remove
apt-get remove apparmor apparmor-utils