vsFTPd и ProFTPD — одни из самых простых способов поднять сервер FTP на Linux.
FTP-сервер vsFTPd поддерживает IPv6 и SSL, является FTP-сервером по умолчанию во многих операционных системах.
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.
xferlog_enable = YES xferlog_std_format=YES
Вы может скачать работающий конфиг vsftpd.conf в окружении Ubuntu 20.04.1 LTS: vsftpd сервер успешно работает под нагрузкой как на ethernet интерфейсе, так и tun0 интерфейса OpenVPN клиента.
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.