Вопрос или проблема
Я установил vsftpd
на свою инстанцию Linux Ubuntu 21.04
с помощью следующей команды:
sudo apt-get install vsftpd
Я включил FTP в своем фаерволе ufw
с помощью следующей команды:
sudo ufw allow ftp
Мой файл /etc/vsftpd.conf
содержит следующее:
# Пример конфигурационного файла /etc/vsftpd.conf
#
# Стандартные настройки довольно параноидальные. Этот образец файла
# немного смягчает ситуацию, чтобы сделать демона ftp более удобным.
# Пожалуйста, смотрите vsftpd.conf.5 для всех стандартных настроек.
#
# ПРОЧИТАЙТЕ ЭТО: Этот файл примера НЕ является исчерпывающим списком опций vsftpd.
# Пожалуйста, обратитесь к руководству vsftpd.conf.5, чтобы получить полное представление о возможностях vsftpd.
#
#
# Работать автономно? vsftpd может работать как из inetd, так и как автономный
# демон, запускаемый из скрипта инициализации.
listen=YES
#
# Эта директива позволяет прослушивать сокеты IPv6. По умолчанию прослушивание
# на адресе "any" IPv6 (::) будет принимать соединения от IPv6 и IPv4 клиентов.
# Не обязательно прослушивать *оба* сокета IPv4 и IPv6. Если вы хотите этого (возможно, потому что хотите прослушивать конкретные
# адреса), тогда необходимо запускать две копии vsftpd с двумя конфигурационными
# файлами.
listen_ipv6=NO
#
# Разрешить анонимное FTP? (Отключено по умолчанию).
anonymous_enable=NO
#
# Раскомментируйте это, чтобы разрешить локальным пользователям вход в систему.
local_enable=YES
#
# Раскомментируйте это, чтобы включить любую форму команды записи FTP.
write_enable=YES
#
# Стандартная umask для локальных пользователей 077. Возможно, вы захотите изменить это на 022,
# если ваши пользователи ожидают этого (022 используется большинством других ftpd).
#local_umask=022
#
# Раскомментируйте это, чтобы разрешить анонимному пользователю FTP загружать файлы. Это будет иметь
# эффект только если вышеупомянутое глобальное разрешение записи активировано. Также вам
# очевидно, потребуется создать директорию, доступную для записи пользователем FTP.
#anon_upload_enable=YES
#
# Раскомментируйте это, если хотите, чтобы анонимный пользователь FTP мог создавать
# новые папки.
#anon_mkdir_write_enable=YES
#
# Активировать сообщения о директориях - сообщения, передаваемые удаленным пользователям при входе
# в определенную директорию.
dirmessage_enable=YES
#
# Если включено, vsftpd будет отображать листинг директорий со временем
# в вашей местной временной зоне. По умолчанию отображается GMT. Время,
# возвращаемое командой MDTM FTP также затронуто этой опцией.
use_localtime=YES
#
# Активировать логирование загрузок/выгрузок.
xferlog_enable=YES
#
# Убедитесь, что соединения передачи PORT исходят из порта 20 (ftp-data).
connect_from_port_20=YES
#
# Если вы хотите, вы можете организовать так, чтобы загруженные файлы для анонимных пользователей
# принадлежали другому пользователю. Замечание! Использование "root" для загруженных файлов не
# рекомендуется!
#chown_uploads=YES
#chown_username=whoever
#
# Вы можете переопределить, куда будут записываться лог-файлы, если хотите. Ниже показано значение по умолчанию.
#xferlog_file=/var/log/vsftpd.log
#
# Если хотите, вы можете иметь свой лог-файл в стандартном формате фтп xferlog.
# Обратите внимание, что расположение лог-файла по умолчанию в этом случае /var/log/xferlog.
#xferlog_std_format=YES
#
# Вы можете изменить значение по умолчанию для времени ожидания неактивной сессии.
#idle_session_timeout=600
#
# Вы можете изменить значение по умолчанию для времени ожидания соединения с данными.
#data_connection_timeout=120
#
# Рекомендуется, чтобы вы определили на своей системе уникального пользователя,
# которого ftp сервер может использовать как полностью изолированного и непривилегированного пользователя.
#nopriv_user=ftpsecure
#
# Включите это, и сервер будет распознавать асинхронные запросы ABOR. Не рекомендуется для безопасности
# (код не тривиален). Не включая его, однако, может привести к путанице в старых FTP клиентах.
#async_abor_enable=YES
#
# По умолчанию сервер будет претендовать, что разрешает режим ASCII, но на самом деле игнорировать
# запрос. Включите параметры ниже, чтобы сервер действительно выполнял
# изменение ASCII над файлами в режиме ASCII.
# Имейте в виду, что на некоторых FTP серверах поддержка ASCII позволяет
# атаку отказа в обслуживании (DoS) через команду "SIZE /big/file" в режиме ASCII. vsftpd
# предвидел эту атаку, и всегда был безопасен, сообщая размер
# исходного файла.
# Изменение ASCII - ужасная особенность протокола.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# Вы можете полностью настроить строку приветственного баннера:
#ftpd_banner=Welcome to blah FTP service.
#
# Вы можете указать файл запрещенных для анонимных пользователей e-mail адресов. Это, кажется,
# полезно для борьбы с определенными атаками DoS.
#deny_email_enable=YES
# (значение по умолчанию ниже)
#banned_email_file=/etc/vsftpd.banned_emails
#
# Вы можете ограничить локальных пользователей их домашними директориями. См. FAQ для
# возможных рисков, прежде чем использовать chroot_local_user или
# chroot_list_enable ниже.
chroot_local_user=YES
#
# Вы можете указать явный список локальных пользователей, которых chroot() в их домашнюю
# директорию. Если chroot_local_user установлен в YES, тогда этот список становится списком
# пользователей, которых НЕ чрутить().
# (Предупреждение! chroot может быть очень опасным. Если используете chroot, убедитесь, что
# пользователь не имеет прав на запись в директорию верхнего уровня внутри
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (значение по умолчанию ниже)
#chroot_list_file=/etc/vsftpd.chroot_list
#
# Вы можете активировать параметр "-R" для встроенной команды ls. Это отключено
# по умолчанию, чтобы избежать ситуации, при которой удаленные пользователи могли бы вызывать
# чрезмерное количество В/В операций на больших сайтах. Однако некоторые неисправные FTP клиенты,
# такие как "ncftp" и "mirror", предполагают
# наличие параметра "-R", поэтому существует веская причина для его включения.
#ls_recurse_enable=YES
#
# Настройка
#
# Некоторые из настроек vsftpd не соответствуют файловой системе по умолчанию.
#
# Этот параметр должен быть именем директории, которая пуста. Кроме того,
# директория не должна быть доступна для записи пользователем ftp. Данная директория
# используется как безопасная тюрьма chroot() во время, когда vsftpd не требует
# доступа к файловой системе.
secure_chroot_dir=/var/run/vsftpd/empty
#
# Эта строка обозначает имя службы PAM, которую будет использовать vsftpd.
pam_service_name=vsftpd
#
# Эта опция указывает местоположение сертификата RSA, который будет использоваться для шифрованных соединений SSL.
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
#
# Раскомментируйте это, чтобы указать, что vsftpd использует файловую систему utf8.
#utf8_filesystem=YES
user_sub_token=$USER
local_root=/home/$USER/ftp_user
userlist_enable=YES
userlist_file=/etc/vsftpd.user_list
userlist_deny=NO
Я добавил своего предполагаемого пользователя ftpuser
в /etc/vsftpd.user_list
. Следующее содержится в выводе команды netstat -tanp
:
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 939/docker-proxy
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 585614/vsftpd
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 582461/systemd-reso
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 581200/sshd: /usr/s
Вышеуказанное, кажется, указывает на то, что vsftpd
прослушивает порт 21, как и должно быть. Однако, я не могу подключиться к нему, используя WinSCP
на порту 21 с протоколом FTP. Однако странно то, что я могу подключиться на порту 22 с использованием протокола SFTP.
Также стоит упомянуть, что ранее у меня уже был установлен и настроен vsftpd
для SFTP. Я выполнил sudo apt-get purge vsftpd
и с тех пор пытаюсь переустановить.
Изменение Даже когда я выполняю команду ftp localhost
, я получаю сообщение об ошибке: ftp: connect: Connection timed out
Вот шаги, которые я теперь предпринял.
Установить VSFTPD
sudo apt update
sudo apt install vsftpd
sudo service vsftpd status
Настроить фаервол
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw allow 990/tcp
sudo ufw allow openssh
sudo ufw enable
sudo ufw status
Создать ftpuser и директории
sudo adduser ftpuser
sudo mkdir /home/ftpuser/ftp
sudo chown nobody:nogroup /home/ftpuser/ftp
sudo chmod a-w /home/ftpuser/ftp
sudo mkdir /home/ftpuser/ftp/files
sudo chown ftpuser:ftpuser /home/ftpuser/ftp/files
Настроить конфигурацию VSFTPD
sudo nano /etc/vsftpd.conf
С следующими записями
listen=NO
listen_ipv6=YES
anonymos_enable=NO
local_enable=YES
write_enable=YES
local_mask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
force_dot_files=YES
pasv_min_port=400000
pasv_max_port=500000
user_sub_token=$USER
local_root=/home/$USER/ftp
Перезапустить VSFTPD, чтобы изменения вступили в силу
sudo systemctl restart vsftpd.service
Попробуйте подключиться с помощью Filezilla и WinSCP. Ничего не удалось. Однако, так же как и ранее, я смог подключиться через SFTP на порту 22.
Что я делаю не так?
Я переустановил Ubuntu 21.04
и следовал шагам из этого руководства: https://www.digitalocean.com/community/tutorials/how-to-set-up-vsftpd-for-a-user-s-directory-on-ubuntu-18-04, и теперь всё работает как ожидалось.
Ответ или решение
Проблема с подключением к vsftpd
на порту 21 может возникнуть из-за нескольких причин, которые касаются настройки и конфигурации FTP-сервера на вашей системе Ubuntu 21.04. Рассмотрим основные шаги по устранению неполадок и возможные решения этой проблемы.
Первоначальная диагностика
-
Проверка статуса службы: Убедитесь, что служба
vsftpd
запущена и работает корректно. Это можно сделать командой:sudo systemctl status vsftpd
Если служба неактивна, запустите её с помощью:
sudo systemctl start vsftpd
-
Проверка сетевых подключений: Команда
netstat -tanp
показывает, чтоvsftpd
слушает на порту 21. Однако, для дальнейшей проверки используйте:sudo lsof -i -P -n | grep LISTEN
Это поможет убедиться, что никакие другие процессы не конфликтуют с
vsftpd
.
Конфигурация брандмауэра
-
Настройки UFW: Вы уже добавили правила, позволяющие трафик на порты 20, 21, и порты 40000-50000 для пассивного режима. Проверьте статус UFW:
sudo ufw status
Убедитесь, что все необходимые порты действительно разрешены.
Конфигурация vsftpd
-
Проверка конфигурационного файла: В вашем конфигурационном файле
/etc/vsftpd.conf
присутствует потенциальная ошибка в строках, связанных с пассивным режимом. Параметрыpasv_min_port
иpasv_max_port
должны быть установлены в допустимые диапазоны значений. Например:pasv_min_port=40000 pasv_max_port=50000
Убедитесь, что нет ошибок, таких как опечатки в именах параметров, например,
anonymos_enable
вместоanonymous_enable
. -
Перезапуск
vsftpd
: Чтобы применить изменения в конфигурации, перезапуститеvsftpd
:sudo systemctl restart vsftpd
Локальная диагностика
-
Локальное тестирование: Попробуйте подключиться к FTP-серверу локально, используя команду:
ftp localhost
Если подключение не удаётся, обратите внимание на сообщения об ошибках, которые могут указать на конкретные проблемы.
Общие рекомендации
-
Проверка системных логов: Логи системы помогут выявить возможные ошибки или предупреждения. Используйте команды:
sudo journalctl -u vsftpd
-
Обновление системы: Убедитесь, что ваша система и все установленные пакеты обновлены:
sudo apt update && sudo apt upgrade
Следуя этим указаниям, вы сможете выявить и устранить проблему с подключением к vsftpd
на порту 21. Если проблема не решится, рекомендую обратиться к документации vsftpd
или специальным форумам для получения более детальной помощи.