vsftpd закрывает соединение с кодом 421 при перечислении содержимого каталога

В настоящее время я борюсь с какой-то проблемой соединения с vsftpd.

Я использую arch linux и имею vsftpd версии 3.0.3.

Я не использую iptables или что-то еще. Когда я подключаюсь к своему FTP-серверу, я успешно могу войти в систему и просмотреть каталоги. Я также могу загружать и скачивать файлы.

Пользователь FTP chrooted в свой домашний каталог, и все подкаталоги принадлежат пользователю ftp.

Текущая структура:

|- home_dir |- dir1 |- dir2 |- dir3 |- dir3 |- dir4 |- ... 

Я могу «cd» в dir1, делать «ls» и загружать / загружать файлы. Я также могу «cd» в dir2, но здесь идет сложная часть:

Я могу прекрасно загружать файлы в dir2, но когда я делаю «ls», сервер закрывает соединение, говоря: «421 Сервис недоступен, у удаленного сервера есть закрытое соединение». Я понял, что причиной являются несколько подкаталогов «dir2». Я понял, что существование 8 из всех подкаталогов вызывает закрытие соединения. Как только я удалю их, листинг работает отлично. Все имена содержат более низкие буквы от a до z, никаких специальных символов.

Мой ftp config:

 log_ftp_protocol=YES anonymous_enable=NO userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO pasv_addr_resolve=YES pasv_address=mydomain.com pasv_enable=Yes pasv_min_port=40020 pasv_max_port=40030 local_enable=YES write_enable=YES local_umask=002 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES chown_username=myuser ftpd_banner=Welcome. chroot_local_user=YES и log_ftp_protocol=YES anonymous_enable=NO userlist_enable=YES userlist_file=/etc/vsftpd.user_list userlist_deny=NO pasv_addr_resolve=YES pasv_address=mydomain.com pasv_enable=Yes pasv_min_port=40020 pasv_max_port=40030 local_enable=YES write_enable=YES local_umask=002 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES chown_username=myuser ftpd_banner=Welcome. chroot_local_user=YES 

И это то, что сервер FTP-Log говорит:

 Wed Dec 28 13:55:06 2016 [pid 2] CONNECT: Client "<client_ip>" Wed Dec 28 13:55:06 2016 [pid 2] FTP response: Client "<client_ip>", "220 Welcome." Wed Dec 28 13:55:07 2016 [pid 2] FTP command: Client "<client_ip>", "USER myuser" Wed Dec 28 13:55:07 2016 [pid 2] [myuser] FTP response: Client "<client_ip>", "331 Please specify the password." Wed Dec 28 13:55:07 2016 [pid 2] [myuser] FTP command: Client "<client_ip>", "PASS <password>" Wed Dec 28 13:55:07 2016 [pid 1] [myuser] OK LOGIN: Client "<client_ip>" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "230 Login successful." Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "OPTS UTF8 ON" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "200 Always in UTF8 mode." Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PWD" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "257 "/" is the current directory" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "TYPE I" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "200 Switching to Binary mode." Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,86)." Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST" Wed Dec 28 13:55:07 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing." Wed Dec 28 13:55:08 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "226 Directory send OK." Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "CWD /dir1" Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "250 Directory successfully changed." Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV" Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,92)." Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST" Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing." Wed Dec 28 13:55:09 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "226 Directory send OK." Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "CWD /dir1/dir2" Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "250 Directory successfully changed." Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "PASV" Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "227 Entering Passive Mode (<server_ip>,156,87)." Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP command: Client "<client_ip>", "LIST" Wed Dec 28 13:55:11 2016 [pid 3] [myuser] FTP response: Client "<client_ip>", "150 Here comes the directory listing." 

Журнал всегда останавливается после «150 Здесь идет список каталогов». Я пробовал это несколько раз.

И это то, что я вижу, когда я использую команду ftp на моем терминале:

 $ ftp -n 127.0.0.1 Connected to 127.0.0.1. 220 Welcome. ftp> user myuser 331 Please specify the password. Password: 230 Login successful. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 4 1000 1000 4096 Dec 28 13:27 dir1 226 Directory send OK. ftp> cd dir1 250 Directory successfully changed. ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rwxr-xr-x 1 1000 1000 469504 Dec 23 03:03 file_1 -rw-r--r-- 1 1000 1000 186 Feb 19 2016 file_2 -rw-r--r-- 1 1000 1000 121856 Dec 23 00:16 file_3 -rw-r--r-- 1 1000 1000 118272 Feb 12 2016 file_4 -rw-r--r-- 1 1000 1000 88232 Mar 22 2016 file_5 -rw-r--r-- 1 1000 1000 64680 Mar 22 2016 file_6 -rw-r--r-- 1 1000 1000 101032 Mar 22 2016 file_7 -rw-r--r-- 1 1000 1000 6144 Mar 22 2016 file_8 -rw-r--r-- 1 1000 1000 899584 Mar 22 2016 file_9 drwxrwxr-x 42 1000 1000 4096 Dec 28 11:38 dir2 226 Directory send OK. ftp> cd dir2 250 Directory successfully changed. ftp> pwd 257 "/dir1/dir2" is the current directory ftp> ls 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. 421 Service not available, remote server has closed connection 

Большое спасибо за помощь.

У меня была такая же проблема, также на Arch Linux с vsftp 3.0.3 (pkg rel 3). Оказалось, что в каталоге, вызывающем такое поведение, было слишком много файлов (2,666). После удаления большинства из них листинг на ftp снова начал работать.

Странно, да? 2,666, похоже, не слишком много. Но я ничего не изменил. Настройки vsftp по-прежнему остаются неизменными, а права файловой системы не затрагиваются. Также имена файлов не содержали каких-либо странных символов (последовательные номера длиной до 21 символа).