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