Настройка vsftpd для анонимной загрузки. Создает файлы, но замирает на 0 байтов

vsftpd в Ubuntu после sudo apt-get install vsftpd Затем выполните настройку, как в прикрепленном файле /etc/vsftpd.conf. Анонимный ftp позволяет напрямую загружать cd и позволяет поместить файл myfile.txt, который создается на сервере, но затем клиент зависает и никогда не продолжает работу. Файл на сервере остается в 0 байтов.

Вот папки и разрешения:

root@support:/home/ftp# ls -ld .
drwxr-xr-x 3 root root 4096 Jun 22 00:00 .
root@support:/home/ftp# ls -ld pub
drwxr-xr-x 3 root root 4096 Jun 21 23:59 pub
root@support:/home/ftp# ls -ld pub/upload
drwxr-xr-x 2 ftp ftp 4096 Jun 22 00:06 pub/upload
root@support:/home/ftp#

Вот файл vsftpd.conf:

root@support:/home/ftp# grep -v '#' /etc/vsftpd.conf
listen=YES
anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
anon_root=/home/ftp/pub/
connect_from_port_20=YES
chown_uploads=YES
chown_username=ftp
nopriv_user=ftp
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

Вот пример файла, который пытался загрузить:

root@support:/home/ftp/pub/upload# ls -l
total 0
-rw------- 1 ftp nogroup 0 Jun 22 00:06 build.out

Это клиент пытается загрузить... он заморожен в этот момент:

$ ftp 173.203.89.78
Connected to 173.203.89.78.
220 (vsFTPd 2.0.6)
User (173.203.89.78:(none)): ftp
331 Please specify the password.
Password:
230 Login successful.
ftp> put build.out
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp> cd upload
250 Directory successfully changed.
ftp> put build.out
200 PORT command successful. Consider using PASV.
150 Ok to send data.

РЕДАКТИРОВАТЬ: Оказывается, что клиенты ftp работают из других систем под управлением Linux. Приведенные выше сообщения об ошибках появляются только при использовании ftp на хосте Windows 7 с использованием командной строки ftp.

На самом деле, на той же машине с Windows 7, если вы поместите адрес в Windows Explorer, он работает. Он может копировать и вставлять файлы, и они отображаются на сервере правильно загружены.

Так что эта проблема возникает только в командной строке Windows 7 ftp. ПРИМЕЧАНИЕ. Я дважды проверил, что брандмауэр полностью отключен на этом компьютере.

1 ответ

Похоже, вы пытаетесь использовать активный FTP, но межсетевой экран между сервером и (или включенным) вашим клиентом блокирует канал данных. Транзакция FTP состоит из двух каналов или соединений: командный канал (на порту 21) и канал данных (обычно связанный с портом 20). Клиент выдает команды на командном канале, а полезная нагрузка (содержимое файла и вывод таких команд, как ls) идет по каналу данных. Если у вас есть брандмауэр или маршрутизатор, мешающий каналу передачи данных, вы можете войти в систему, и все будет работать, пока вы не попытаетесь получить или отправить информацию на / с сервера - в этот момент все будет зависать. Сервер пытается подключиться к клиенту, но не может этого сделать.

В активном режиме (по умолчанию, если вы не PASV команда [и обратите внимание, что vsftpd предлагает вам Consider using PASV]), сервер пытается открыть соединение с клиентом для канала данных. Это верно - сервер подключается обратно к клиенту и через порт больше 1023. Брандмауэры имеют тенденцию возражать против этого, и если вы находитесь за NAT, он просто не может работать вообще.

Вот где приходит пассивный FTP. При использовании пассивного FTP сервер использует установленный канал connamd, чтобы сообщить клиенту, какой порт и IP-адрес использовать для канала данных, а затем клиент открывает второе соединение с сервером для канала данных., Это решает проблему клиента, находящегося за брандмауэром. Все, что вам нужно сделать, это выдать PASV команда от клиента до PUT, Если это не сработает, то вам может понадобиться немного помочь vsftpd. Элементы конфигурации, которые вы можете включить pasv_min_port а также pasv_max_port, который позволяет вам контролировать диапазон портов, vsftpd сообщает клиенту о подключении, чтобы вы могли открыть их в брандмауэре. Кроме того, если сервер не прослушивает тот же IP-адрес, к которому подключается клиент (возможно, внутри NAT), pasv_address сообщает vsftp, куда клиент действительно хочет подключиться (он не будет автоматически использовать адрес, по которому открыт канал команд).

Другие вопросы по тегам