FTP сервер vsFTPd

vsFTPd и ProFTPD — одни из самых простых способов поднять сервер FTP на Linux.

FTP-сервер vsFTPd поддерживает IPv6 и SSL, является FTP-сервером по умолчанию во многих операционных системах.

  • Обновим пакеты и установим vsftpd
sudo apt update && sudo apt install vsftpd
  • Проверим статус демона
sudo service vsftpd status
● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2020-11-02 11:13:17 UTC; 1min 17s ago
   Main PID: 82770 (vsftpd)
      Tasks: 1 (limit: 9451)
     Memory: 612.0K
     CGroup: /system.slice/vsftpd.service
             └─82770 /usr/sbin/vsftpd /etc/vsftpd.conf

Давайте откроем порты 20 и 21 для FTP и порты 40000-50000 для пассивного FTP. Также откройте порт 990 для TLS, если планируете его использовать.

sudo ufw allow OpenSSH
 
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw allow 990/tcp

Включаем фаервол Настройка правил фаервола (iptables) с помощью UFW:

sudo ufw enable

Проверяем настройки фаервола:

sudo ufw status

Пользователь создается системный, поэтому ему нужно закрыть доступ к подключению по протоколу SSH, указать шелом /bin/false к сожалению нельзя. Согласно этой заметке разрешаем доступ к SSH только определенным пользователям, остальные блокируем.

Cоздадим нашего тестового пользователя с помощью Быстрое cоздание пользователей в Linux (useradd, usermod, chsh) и зададим ему пароль:

sudo useradd -m -c "Test User" -s /bin/bash testuser
sudo passwd testuser

Поскольку мы хотим подключаться от его имени к FTP-серверу, то нам нужно добавить его в vsftpd.userlist:

echo 'testuser' >> /etc/vsftpd.userlist

В процессе установки создается пользователь ftp с домашним каталогом /srv/ftp. Это каталог по умолчанию для FTP. Если вы желаете поменять его расположение, например, на /srv/files/ftp, просто создайте новый каталог и измените домашний каталог пользователя ftp:

sudo mkdir /srv/files/ftp
sudo usermod -d /srv/files/ftp ftp 

После изменений перезапустите vsftpd:

sudo service vsftpd restart

Сделаем копию оригинального файла настроек vsftpd.

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig

Правим конфигурационный файл vsftpd.conf.

  • Отключаем анонимный вход: anonymous_enable = NO
  • Разрешаем использовать имена локальных пользователей для входа: local_enable = YES
  • Для авторизованных пользователей разрешаем команды, позволяющие изменять файловую систему: write_enable = YES
  • Установим значение umask для новых файлов, создаваемых по FTP: local_umask = 022
  • Использовать порт 20 для передачи данных вместо случайного: connect_from_port_20 = YES
  • Записывать в лог файл все транзакции по передаче файлов и использовать стандартный формат лога
  • Чтобы заставить vsftpd вести логи подключений добавьте параметр dual_log_enable=YES
xferlog_enable = YES
xferlog_std_format=YES

Вы может скачать работающий конфиг vsftpd.conf в окружении Ubuntu 20.04.1 LTS: vsftpd сервер успешно работает под нагрузкой как на ethernet интерфейсе, так и tun0 интерфейса OpenVPN клиента.

vsftpd.conf
listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
#chown_uploads=YES
#chown_username=whoever
#xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
#data_connection_timeout=120
#nopriv_user=ftpsecure
#async_abor_enable=YES
#ascii_upload_enable=YES
#ascii_download_enable=YES
#ftpd_banner=Welcome to blah FTP service.
#deny_email_enable=YES
#banned_email_file=/etc/vsftpd.banned_emails
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list
#ls_recurse_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
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
ssl_enable=NO
#utf8_filesystem=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
allow_writeable_chroot=YES
dual_log_enable=YES

Из командной строки запускаем клиента FTP:

# ftp localhost
Connected to localhost.
220 (vsFTPd 3.0.3)

Пробуем залогинеться по тестовым пользователем и другими пользователями, в том числе анонимным. При попытки ввода имени пользователя не указанного в файле vsftpd.userlist должна быть запрет (ответ с кодом 530 Permission denied. Login failed.).

Настройка завершена. Удачи!

Чтобы посмотреть кто внёс изменение на сервере через FTP, а точнее удалил файлы используйте лог файл /var/log/xferlog. Укажите параметры логирования как в этом конфигурационном файле vsftpd

Частая проблема vsftpd заходит кто то с неправильным паролем - куда смотреть то - логов же нет даже обычный правильный заход не пишется. Вы просто не настроили конфигурационный файл vsftpd.

Ошибки логирования у вас должны быть в файле /var/log/vsftpd.log И иметь такой вид:

Thu Nov  5 09:24:55 2020 [pid 2830999] CONNECT: Client "::ffff:10.26.95.175"
Thu Nov  5 09:24:55 2020 [pid 2830996] [buhna] OK LOGIN: Client "::ffff:10.26.95.175"

Устранение ошибки GnuTLS -15 в gnutls_record_recv: An unexpected TLS packet was received., возникающей при подключение FTP клиента, например FileZilla.

PQ VPS сервера в 28+ странах.