Главная >> Сервер >> Установка FTP на Ubuntu 20.04

Установка FTP на Ubuntu 20.04

FTP или File Transfer Protocol - это достаточно древний, но в то же время надёжный и проверенный протокол выгрузки файлов на удалённый сервер или их скачивания. Также иногда этот протокол применяется веб-мастерами для управления файлами или организации хранилища данных.

В этой статье мы рассмотрим, как выполняется установка FTP на Ubuntu 20.04, как настроить все необходимые компоненты, в том числе и защищённое соединение. Мы будем использовать FTP-сервер VSFTPD или Very Secure FTP Daemon, который обеспечивает самую надёжную защиту от уязвимостей.


Содержание статьи

Установка FTP в Ubuntu

Программа доступна из официальных репозиториев, поэтому установка FTP на Ubuntu Server не должна вызвать проблем. Сначала обновите список пакетов в репозиториях, затем установите саму программу:

sudo apt update
sudo apt install vsftpd

Когда установка будет завершена, вам необходимо включить сервис vsftpd, поскольку он не будет запущен по умолчанию, а также добавить службу в автозагрузку:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd

Если у вас установлен фаервол ufw, а такая ситуация возникает, когда вы пытаетесь установить FTP на Ubuntu Server, нужно открыть порты 20 и 21 для нормальной работы. Чтобы это сделать, выполните команды:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw status

Установка FTP Ubuntu завершена, но теперь вам осталось настроить всё необходимое для обеспечения безопасной работы. Никогда не используйте FTP-сервер с настройками по умолчанию в производственных сетях, это небезопасно.

Настройка FTP Ubuntu

Теперь перейдём к настройке. Нам нужно поменять всего несколько параметров, чтобы полностью защитить ваш FTP-сервер. Сначала мы рассмотрим самые очевидные настройки: отключения анонимного входа и так далее. Сначала необходимо скопировать оригинальный файл настроек, чтобы в случае проблем вернуть всё как было:

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

Затем откройте файл в редакторе:

sudo vi /etc/vsftpd.conf

Затем добавьте такие настройки. Вам нужно будет найти и изменить значения указанных строк, добавлять новые, если они уже есть, не стоит. Сначала отключаем анонимный вход:

anonymous_enable = NO

Разрешаем использовать имена локальных пользователей для входа:

local_enable = YES

Для авторизованных пользователей разрешаем команды, позволяющие изменять файловую систему:

write_enable = YES

Установим значение umask для новых файлов, создаваемых по FTP:

local_umask = 022

Включаем сообщение о необходимости выбрать каталог после регистрации:

dirmessage_enable = YES

Записывать в лог файл все транзакции по передаче файлов и использовать стандартный формат лога:

xferlog_enable = YES
xferlog_std_format=YES

Использовать порт 20 для передачи данных вместо случайного, это нужно для нормальной работы фаервола:

connect_from_port_20 = YES

Указываем, что нужно ожидать входящих соединений:

listen=YES

Использовать PAM-библиотеки:

pam_service_name=vsftpd

На завершение разрешим аутентификацию только пользователей, перечисленных в файле userlist:

userlist_enable = YES

Указываем файл с нашими виртуальными пользователями:

userlist_file=/etc/vsftpd.userlist

По умолчанию таким пользователям запрещён вход в систему, но мы хотим совсем обратное, поэтому добавьте такую строчку:

userlist_deny=NO

При входе пользователей на FTP-сервер, они могут работать только в корневом каталоге FTP. Если вы хотите, чтобы пользователи были ограничены только своей домашней папкой, то необходимо раскомментировать эти строчки:

chroot_local_user = YES
allow_writeable_chroot = YES

Первая строчка указывает, что нужно разместить пользователя в изолированном домашнем каталоге, а вторая, что ему можно разрешить запись в этот каталог. Настройка FTP Ubuntu почти завершена, сохраните изменения в конфигурационном файле и перезапустите vsftpd:

sudo systemctl restart vsftpd

Тестирование vsftpd

Сервер готов, но система настроена ещё не полностью. Сначала создадим нашего тестового пользователя с помощью useradd:

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

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

echo "testuser" | sudo tee -a /etc/vsftpd.userlist
cat /etc/vsftpd.userlist

Теперь самое время подключится к нашему FTP-серверу и проверить, как там всё работает. Попробуем войти от имени анонимного пользователя:

У нас ничего не получится. Теперь попробуем войти от имени нашего тестового пользователя, и всё заработает как нужно.

Обратите внимание, что опасно давать пользователям доступ на запись в их домашнюю папку. Делайте это, только если уверены в том, что это необходимо и безопасно.

Настройка домашних папок пользователей

Чтобы хоть как-то обойти проблемы с безопасностью, вы можете использовать другую папку вместо домашней для предоставления её пользователю. Сначала создадим такую папку для нашего пользователя:

sudo mkdir -p /home/testuser/ftp/files

Уберём право на запись для папки ftp:

sudo chown nobody:nogroup /home/testuser/ftp
sudo chmod a-w /home/testuser/ftp

Затем дайте необходимые полномочия пользователю на запись в подпапку.

sudo chown -R testuser:testuser /home/testuser/ftp/files
sudo chmod -R 0770 /home/testuser/ftp/files/

Теперь вернёмся к конфигурационному файлу vsftpd.conf. Сначала закомментируйте строчку:

 allow_writeable_chroot = YES

Теперь добавьте такие строчки:

user_sub_token = $USER
local_root=/home/$USER/ftp

Первая из них добавляет переменную $USER, в которой содержится имя пользователя, а вторая задаёт корневую папку для каждого пользователя. Осталось снова перезапустить FTP-сервер:

sudo systemctl restart vsftpd

Теперь вы можете снова войти от имени этого пользователя и увидите, что сейчас используется указанная нами папка.

Настройка защищенного соединения

Установка FTP на Ubuntu 20.04 завершена, но в наше время небезопасно использовать открытую передачу данных через сеть. Всё, что только возможно, необходимо шифровать. Поэтому мы рассмотрим, как настроить защищённое соединение для vsftpd. Сначала создадим папку и сгенерируем сам сертификат, который будем использовать:

sudo mkdir /etc/ssl/private
sudo openssl req -x509 -nodes -days 720 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.key -out /etc/ssl/private/vsftpd.pem

Затем нужно разрешить доступ к портам защищённого соединения FTP с фаерволе UFW:

sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw status

И осталось внести несколько правок в настройку самого FTP-сервера. Нам нужно включить ssl_enable и отключить поддержку шифрования sslv2 и sslv3, оставляем только tlsv1:

ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

Далее раскоментируйте такие строки:

rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key

Запретите вход анонимных пользователей по SSL:

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Теперь установим самый сложный шифр SSL:

ssl_ciphers=HIGH

И настроим диапазон портов для передачи данных:

pasv_min_port=40000
pasv_max_port=50000

Осталось перезагрузить наш сервис:

sudo systemctl restart vsftpd

Теперь тестируем, что у нас получилось:

Как видите, мы уже не можем авторизоваться с помощью утилиты ftp. FTP-сервер выдаёт, что мы обязаны использовать шифрование. Поэтому для тестирования применим FileZilla:

Теперь все данные будут передаваться по зашифрованному соединению. Установка  FTP-сервер Ubuntu завершена.

Выводы

В этой статье мы рассмотрели, как выполняется установка FTP на Ubuntu Server 20.04, также как настроить FTP для максимально безопасной работы, включая настройку работы по SSL. Если у вас остались вопросы, спрашивайте в комментариях!

Оцените статью

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (16 оценок, среднее: 4,50 из 5)
Загрузка...
Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

29 комментариев к “Установка FTP на Ubuntu 20.04”

  1. Отличная статья! Спасибо за работу.
    Делал все по инструкции, все получилось, но:
    1) Если создавать каталоги с кириллическими названиями они отображаются кракозябрами, вылечил так (подсмотрел на хабре)
    sudo apt-get install console-cyrillic
    echo cyr >> ~/.bashrc
    2) Создал еще одного пользователя точно так же как описано в разделе "Тестирование vsftpd", но он не может подключится к серверу, Filezilla выдает ошибку

    Статус: TLS соединение установлено.
    Команда: USER testuser2
    Ответ: 331 Please specify the password.
    Команда: PASS ***********
    Ошибка: Ошибка GnuTLS -15: An unexpected TLS packet was received.
    Ошибка: Невозможно подключиться к серверу

    В чем может быть проблема?

    Ответить
  2. Проверил логи vsftpd в них есть инфа о действиях пользователя testuser, но ничего о testuser2.
    Попробовал сделать так:

    $ sudo chown -R testuser2:testuser /home/testuser/ftp/files
    $ sudo chmod -R 0770 /home/testuser/ftp/files/

    не помогло, помогите пожалуйста, куда копать?

    Ответить
  3. попробовал отключить настройки защищенного соединения и подключится, результат:
    Команда: USER testuser2
    Ответ: 331 Please specify the password.
    Команда: PASS *********
    Ответ: 500 OOPS: cannot change directory:/home/testuser2/ftp
    Ошибка: Критическая ошибка: Невозможно подключиться к серверу

    Проверил права пользователя testuser2 на каталог /home/testuser/ftp/files
    все нормально, могу создавать и удалять каталоги например.
    На форумах народ пишет что у них та же проблема с настройкой мультидоступа к vsfpd, если пользователь один то все работает нормально, либо пользователей несколько, но каждый сидит в своей домашней папке, рабочего варианта единой папки для нескольких пользователей не нашел =(

    Ответить
  4. Снова включил настройки защищенного соединения
    вернул на исходную права пользователей, сделал все как в инструкции
    и просто закомментил в vsftpd.conf строку
    #chroot_local_user = YES
    теперь пользователь testuser подключается с шифрованием и попадает в папку /home/testuser/ftp/files
    а пользователь testuser2 попадает в свой домашний каталог, при этом видит домашние папки других пользователей, без права на запись, но в папку /home/testuser/ftp/files войти не может.

    Как же сделать так чтоб все пользователи пользовались одной папкой?

    Ответить
  5. [code]
    $ sudo systemctl start vsftpd
    $ sudo systemctl enable vsftpd
    [/code]

    подскажи, для ubuntu 14 аналоги команд.

    p.s. на странице "попросить инструкцию" форма не выводится, только тег

    Ответить
  6. Сегодня, настраивал vsftpd (3.0.3-3ubuntu2) по Вашей статье, столкнулся с ошибкой соединения "ftp: connect: Connection refused". Искал в чем проблема, нашел : при установке параметра listen=YES , параметр listen_ipv6 обязательно должен быть - NO , и также между параметром и его значением не должно быть пробелов, если копировать из статьи будет ошибка. Спасибо за статью - пригодилась.

    Ответить
  7. Доброго времени суток. Помогите пожалуйста, сделал все по вашей инструкции. До раздела про шифрование. Теперь в чем проблема заходит на FTP из по Windows но не дает добавлять туда файлы Выдает ошибки 200,227,550. Как это можно решить?

    Ответить
  8. С момента userlist_file=/etc/vsftpd.userlist
    вплоть до добавления пользователя в список пользователей, всё, filezilla получает отказы подключения!

    Ответить
  9. Если пишет что неправильный логин. Нужно сделать домашний каталог пользователя только для чтения.
    chmod a-w /home/testuser
    и запуск
    ftp [ваш ip]

    Ответить
  10. Версия. vsftpd: version 3.0.3. Что-то с вашей инструкцией не так.
    listen=YES
    Если указывать этот параметр, то при любой попытке соединения к localhost или извне выходит:
    ftp: connect: Connection refused
    Насколько этот параметр критичен?

    Ответить
  11. Добрый день. У меня не получается настроить чтоб можно было обращаться к серверу не из локальной сети а из интернета . В чем может быть причина? как это исправить ? можете помочь ?
    ( в локалке все работает: подключаюсь Файлзилой и качаю-записываю. А если от мобильной сети то ж(если не включать пассивный режим , то ошибка что,мол сервер возвращает другой(я так понимаю внутренней сети) адрес...а в пассивном режиме другая ошибка - не дает чтото там перечитать директорию)

    Ответить
  12. На некоторых системах (например в Ubuntu Server 16.04) указание в файле настроек параметров типа "userlist_enable = YES" вызывает ошибку запуска сервера.
    Правильный вид параметров "userlist_enable=YES" т.е. БЕЗ пробелов в строке параметра.

    Ответить
  13. Отличный мануал. Но ничего не заработало. Целый день искал причину. Оказалось что в строках с настройками не должно быть пробелов по сторонам от знака =. При копировании строки из мануала и вставке в конфиг не получится подключится. Убираем пробелы и все работает. Может кому-то пригодится

    Ответить
  14. В точку! Сам долго искал, что за фигня при запуске.
    Выдаёт:

    vsftpd.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
    vsftpd.service: Failed with result 'exit-code'.

    Ещё полезная команда для диагностики что именно не нравится vsftpd в конфиге:

    vsftpd -olisten=NO /etc/vsftpd.conf

    Ответить
  15. создавайте юзеров правильно, тогда и ошибок не будет
    sudo useradd -m -c "Test User" -s /bin/bash testuser

    Укажем пароль
    sudo passwd testuser

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

    echo "testuser" | sudo tee -a /etc/vsftpd.userlist

    Ответить
  16. В команде создания ключа/сертификата ошибка:
    ... -keyout /etc/ssl/private/vsftpd.key -out ... должно быть так!
    А написано -keyout /etc/ssl/private/vsftpd.pem

    Ответить

Оставьте комментарий