Назад | Перейти на главную страницу

настройка анонимной загрузки 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, он работает. Он может копировать и вставлять файлы, и они появляются на сервере правильно загруженными.

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

Похоже, вы пытаетесь использовать активный 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, куда клиент действительно хочет подключиться (он не будет автоматически использовать адрес, на котором открыт командный канал).