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