• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Настройка vsftpd на Ubuntu 20.04

Оглавление:

Введение

FTP (сокращенно от File Transfer Protocol) - это сетевой протокол, который когда-то широко использовался для перемещения файлов между клиентом и сервером. FTP до сих пор используется для поддержки устаревших приложений и рабочих процессов с специфическими потребностями. Если у вас есть выбор протокола для загрузки файлов, рассмотрите более современные варианты, которые являются более эффективными, безопасными и удобными. Например загрузка файлов непосредственно из веб-браузера, с помощью безопасного протокола https или такие безопасные протоколы как scp или SFTP которые используются в интерфейсе командной строки.

Vsftpd (акроним very secure FTP daemon) является FTP-сервером для многих Unix-подобных систем, включая Linux, и часто является FTP-сервером по умолчанию для многих дистрибутивов Linux. Vsftpd полезен для оптимизации безопасности, производительности и стабильности. Он также обеспечивает надежную защиту от проблем безопасности, встречающихся в других FTP-серверах. vsftpd может обрабатывать виртуальные конфигурации IPD, поддерживать шифрование с интеграцией SSL и многое другое.

С помощью этого руководства вы сможете настроить vsftpd так, чтобы пользователь мог загружать файлы в свой домашний каталог с помощью подключения по FTP с учетными данными защищенными шифрованием SSL/TLS. Вы также подключитесь к своему выделенному серверу с помощью FileZilla, FTP-клиента с открытым исходным кодом, чтобы проверить шифрование TLS.

Необходимые условия

Чтобы следовать этому руководству, вам понадобятся:

  • Сервер с операционной системой Ubuntu 20.04, пользователь с привилегиями sudo не являющийся root, и включенный брандмауэр (необязательно, но желательно). Подробнее о том, как активировать брандмауэр, вы можете узнать из нашего руководства.
  • Второе, что вам понадобится, это FileZilla, FTP-клиент с открытым исходным кодом, установленный и настроенный на вашей локальной машине. Это позволит вам проверить, может ли клиент подключиться к вашему серверу по TLS.

Шаг первый - Установка vsftpd

Начнем с обновления списка пакетов операционной системы на нашем сервере, для этого в терминале необходимо ввести команду:

sudo apt update

Запуск обновления пакетов ОС.

Далее установите демон vsftpd. Демоном, в операционных системах подобных UNIX, называют программы работающие в фоновом режиме без взаимодействия с пользователем:

sudo apt install vsftpd

Установка демона vsftpd

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

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

Создание копии файла конфигурации

Теперь, имея резервную копию файла конфигурации vsftpd, можно приступить к настройке брандмауэра.

Шаг второй - Настройка брандмауэра (фаервола)

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

Проверьте состояние брандмауэра введя в командной строке:

sudo ufw status

Проверка статуса брандмаузера

В данном случае брандмауэр выключен и не используется, о чем нам сообщает система. Если вы не используете брандмауэр можно пропустить этот шаг. Но предпочтительнее все же настроить и активировать брандмауэр, поэтому активируем его и настроим правила.

Активация брандмауэра

Первым правилом необходимо разрешить подключения к нашему серверу по протоколу SSH, иначе после активации брандмауэра мы потеряем возможность подключаться к серверу. Чтобы настроить сервер на разрешение входящих SSH-соединений, введите команду:

sudo ufw allow ssh

Установка размершения для подключения по SSH

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

Устанлвка правил ufw к значениям по умолчанию

Ну и напоследок, активируем сам брандмауэр ufw, для этого необходимо ввести команду:

sudo ufw enable

Активация брандмаузера

Вы получите предупреждение о том, что активация брандмауэра может прервать активные SSH-соединения. Но поскольку мы установили правило брандмауэра, разрешающее SSH-соединения, мы можем продолжать без опасений. Ответьте на запрос y и нажмите ENTER.

Теперь брандмауэр активен. Выполните команду sudo ufw status verbose, чтобы увидеть активные правила брандмауэра.

sudo ufw status verbose

Проверка активных правил брандмаузера

Система сообщаем нам, что брандмауэр активен и разрешены подключения только по SSH (порт 22).

Поскольку у нас разрешены только SSH подключения, то нам необходимо добавить правила и для подключений по FTP. Откроем порты 20, 21 и 990, чтобы была возможность подключаться по TLS:

sudo ufw allow 20,21,990/tcp

Открытие портов для подключения по TLS

Затем откроем порты 40000-50000 это диапазон пассивных портов для FTP, которые мы потом укажем в конфигурационном файле vsftpd:

Открытие диапазона портов 40000-50000

Проверим, что у нас получилось в итоге, для этого введем команду:

sudo ufw status verbose

Теперь вывод правил брандмауэра должен выглядеть примерно следующим образом:

Проверка статуса правил брандмаузера

Когда vsftpd установлен и открыты необходимые порты в брандмауэре, пришло время создать специального FTP-пользователя.

Шаг третий - Подготовка пользовательской директории

На этом этапе вы создадите специального пользователя для FTP. Однако, возможно у вас уже есть пользователь или пользователи, которым нужен доступ по FTP. В этом руководстве описано как сохранить доступ существующих пользователей к их данным, но, несмотря на это, мы рекомендуем вам начать с нового отдельного FTP-пользователя, пока вы не настроите и не протестируете свою установку, прежде чем перенастраивать существующих пользователей.

Добавляем тестового пользователя, для этого введем команду:

sudo adduser alex

Когда появится запрос, установите пароль для данного пользователя. Далее можно смело нажимать ENTER, чтобы пропустить следующие вопросы, поскольку эти детали не важны для нас сейчас.

Создание тестового FTP пользователя

Хорошей практикой считается ограничение пользователей FTP определенным каталогом, в vsftpd это реалируется с помощью chroot jails. Когда chroot включен, локальные пользователей будут по умолчанию ограничены своим домашним каталогом. Поскольку vsftpd защищает каталог особым образом, он не должен быть доступен для записи пользователю. Это подходит для новых пользователей, которые должны подключаться только по FTP, но существующим пользователям, у которых есть доступ и к SSH, может потребоваться запись и в домашнюю директорию.

В этом примере, вместо того чтобы удалять права на запись для домашнего каталога, мы создадим каталог ftp, который будет служить chroot директорией, и каталог файлов files с возможностью записи в него для хранения файлов.

Создайте директорию ftp:

sudo mkdir /home/alex/ftp

Созлдание chroot директории с именем ftp

Установите владельца на эту директорию:

sudo chown nobody:nogroup /home/alex/ftp

Установка владельца для директории

Установим права доступа запрещающие запись в эту директорию:

sudo chmod a-w /home/alex/ftp

Установка запрета на запсь в директорию.

И теперь проверим права доступа на этот каталог:

sudo ls -la /home/alex/ftp

Проверка установленных прав на каталог

Следующим шагом создадим директорию для загрузки файлов:

sudo mkdir /home/alex/ftp/files

Создание папки с именем files для загрузки файлов

И дадим нашему пользователю права владельца на данную директорию:

sudo chown alex:alex /home/alex/ftp/files

Установка прав владельца на папку files

После чего проверим нашу директорию ftp чтобы удостовериться что мы не допустили ошибок в настройках прав доступа.

sudo ls -la /home/alex/ftp

Проверка прав на папку ftp

Отлично! Мы сделали все верно. Теперь наконец создадим тестовый файл proverka.txt в директории /home/alex/ftp/files, который нам понадобится позже, для этого введем с терминале команду:

echo "vsftpd freehost proverka" | sudo tee /home/alex/ftp/files/proverka.txt

Создание текстового файла.

Теперь, когда мы защитили ftp-каталог и разрешили пользователю доступ только к каталогу файлов /home/alex/ftp/files, можно приступать к конфигурированию vsftpd.

Шаг четвертый - Настройка vsftpd.conf

На этом этапе мы разрешим одному пользователю с локальной учетной записью подключаться по FTP. Две ключевые настройки для этого уже заданы в файле vsftpd.conf. Откройте этот файл с помощью текстового редактора который вам по душе. Мы будем использовать редактор nano, введем в терминале команду:

sudo nano /etc/vsftpd.conf

Открыв файл в редакторе, убедитесь, что для директивы anonymous_enable установлено значение NO, а для директивы local_enable - YES:

Проверка директив в файле конфигурации

Эти параметры запрещают анонимный доступ к FTP серверу и разрешают доступ локальным пользователям. Помните, что разрешение локальных пользователей означает, что любой обычный пользователь, указанный в файле /etc/passwd, может быть использован для входа по FTP.

Некоторые команды FTP позволяют пользователям добавлять, изменять или удалять файлы и каталоги в файловой системе сервера. Включите эти команды, разкомментировав параметр write_enable. Для этого надо удалить символ решетки (#) перед этой директивой:

Добавление директивы write_enable

Так же разкомментируйте директиву chroot_local_user, чтобы предотвратить доступ пользователя подключенного по FTP, к файлам или директориям за пределами домашней директории:

Добавление директивы chroot_local_user

Затем добавьте директиву user_sub_token, значением которой является переменная окружения $USER. Так же добавьте директиву local_root и укажите путь /home/$USER/ftp, который также включает переменную окружения $USER. Эти директивы делают так, что пользователи при входе в систему будут перенаправляться в свой домашний каталог. Добавьте эти настройки в конец файла конфигурации:

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

Добавление директивы user_sub_token

Обозначьте диапазон портов, которые будут использоваться для пассивного FTP, чтобы обеспечить достаточное количество соединений. Это как раз те порты которые мы указывали в конфигурации брандмауэра. Добавляем эти настройки в конец файла конфигурации vsftpd.conf:

pasv_min_port=40000
pasv_max_port=50000

Обозначение портов для пассивного FTP

Чтобы разрешить доступ к FTP только избранным пользователям, необходимо изменить параметры в файле конфигурации, после этого доступ будут иметь только пользователи добавленные в список в файле /etc/vsftpd.userlist:

userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO

Разрешение доступа избранным пользователям

Директива userlist_deny имеет как бы два смысла: если установлено значение YES, пользователям из списка будет отказано в доступе к FTP, если установлено значение NO, доступ будет разрешен только пользователям из списка.

Когда вы закончите вносить изменения, сохраните файл и выйдите из редактора. Если вы использовали nano для редактирования файла, вы можете сделать это, нажав CTRL + X, Y, затем ENTER.

В заключение добавьте своего пользователя в файл /etc/vsftpd.userlist. Используйте флаг -a утилиты tee для добавления в файл:

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

Добавление пользователя в файл со списком пользователей

Проверим, что добавление произошло так, как ожидалось:

cat /etc/vsftpd.userlist

Проверка списка пользователей.

Теперь перезапустите демон vsftpd, чтобы применить изменения конфигурации:

sudo systemctl restart vsftpd

Перезхапуск демона vsftpd

Когда конфигурация создана и демон перезапущен для применения настроек, настало время протестировать доступ к нашему FTP серверу.

Шаг пятый - Проверка подключения к FTP серверу

Мы настроили наш FTP сервер так, чтобы разрешить подключения только пользователю alex. Мы отключили анонимный FTP доступ, давайте проверим это, попытавшись подключиться анонимно. Если конфигурация настроена правильно, анонимным пользователям будет отказано в доступе на FTP сервер. Откройте еще одно окно командной строки и выполните команду для подключения к серверу по протоколу FTP - ftp 192.168.0.151. Обязательно замените 192.168.0.151 на публичный IP-адрес вашего сервера:

Когда появится запрос на ввод имени пользователя, попробуйте войти в систему под несуществующим пользователем, например anonymous, и вы получите следующее сообщение:

Сообщение об ошибке входа в систему.

Закройте соединение, введя команду bye:

Закрытие соединения командой bye

Пользователи, отличные от alex, также не смогут подключиться. Попробуйте подключиться от имени вашего пользователя, который обладает правами sudo в системе. Ему также должно быть отказано в доступе, и это должно произойти до того, как Вы введете пароль:

Подключение под пользователем с правами sudo

Пользователь alex в свою очередь наоборот, должен иметь возможность подключаться, читать и записывать файлы. Давайте попробуем подключиться под назначенным вами пользователем:

Подключение под назначенным нами пользователем alex

Перейдем в директорию files и скачаем наш тестовый файл proverka.txt, для этого необходимо ввести команду cd files для перехода в директорию files, после чего ввести команду ls для вывода списка содержимого данной директории и затем get proverka.txt для скачивания файла.

Копирование файла proverka.txt

Теперь попробуем закачать файл на FTP сервер с новым именем, чтобы проверить работоспособность загрузки и права на запись. Для загрузки файла на ФТП сервер необходимо после подключения ввести команду put proverka.txt zagruzka.txt, где proverka.txt имя нашего файла который у нас существует, а zagruzka.txt это имя файла под которым он будет загружен на сервер:

put proverka.txt zagruzka.txt

Загрузка файла на FTP с новым именем.

Закроем соединение и выйдем с FTP сервера введя команду bye:

Закрытие соединения

Теперь, когда вы проверили свою конфигурацию и все работает как надо, необходимо предпринять шаги по дальнейшей защите нашего сервера.

Шаг шестой - Защита подключения

Поскольку FTP не шифрует данные при передаче, включая учетные данные пользователей, рекомендуется включить TLS/SSL для обеспечения шифрования данных. Первым шагом будет создание SSL-сертификатов для использования вместе с vsftpd.

С помощью openssl создайте новый сертификат, используйте флаг -days 365, чтобы сделать его действительным в течение одного года. Здесь же укажем генерацию закрытого 2048-битного ключа RSA. Если установить флаги -keyout и -out в одно и то же значение, закрытый ключ и сертификат будут находиться в одном файле:

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

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

Самое главное тут это Common Name, в него надо ввести или IP адрес вашего сервера или его имя (хостнейм) по которому вы будете к нему подключаться:

Указание информации для SSL сертифката

После того как вы создали сертификаты, снова откройте конфигурационный файл vsftpd:

sudo nano /etc/vsftpd.conf

В нижней части файла будут две строки, начинающиеся с rsa_. Закомментируйте их, добавив перед каждой знак решетки #:

Добавляем в комментарии строки начинающиеся на rsa_

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

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

Так же измените ssl_enable на YES что настроит vsftpd на принудительное использование SSL. Это не позволит подключиться FTP клиентам которые не могут работать с TLS, но это необходимо для обеспечения шифрования всего трафика во время подключения по FTP к серверу:

Включение директивы ssl_enable и указание пути к файлам сертифката

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

allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

Так же настройте сервер на использование TLS протокола который пришел на смену SSL, добавив следующие строки:

ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

И напоследок, добавьте две заключительные опции. Первая не будет требовать повторного использования SSL, поскольку это может сломать многие FTP-клиенты. Вторая потребует "высоких" шифров, что в настоящее время означает длину ключа, равную или превышающую 128 бит:

require_ssl_reuse=NO
ssl_ciphers=HIGH

Вот как должна выглядеть эта часть файла конфигурации после внесения всех этих изменений:

Файл конфигурации после внесенных изменений

Когда закончите, сохраните и закройте файл. Если вы использовали nano, вы можете выйти, нажав CTRL + X, Y, и ENTER.

Теперь перезапустим сервер vsftpd, чтобы изменения вступили в силу:

sudo systemctl restart vsftpd

Перезапуск vsftpd

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

Страница ошибки соединения

Теперь настал час проверить, сможем ли мы подключиться с помощью клиента поддерживающего TLS, например FileZilla.

Шаг седьмой - Тестирование защищенного подключения с помощью FileZilla

Большинство современных FTP-клиентов могут быть настроены на использование шифрования TLS. В данной статье мы продемонстрируем подключение с помощью FileZilla из-за его кроссплатформенной поддержки. Если вы используете другие FTP клиенты, пожалуйста обратитесь к их документации.

Когда вы впервые откроете FileZilla, найдите значок Менеджер Сайтов, расположенный над словом Хост, самый левый значок в верхнем ряду. Нажмите на него и откройте Менеджер Сайтов:

Кнопка Менеджер сайтов в Filezilla

Откроется новое окно. Нажмите кнопку Новый сайт в правом нижнем углу:

Добавлдение нового сайта в FileZilla

В разделе Мои сайты появится новый пункт с надписью Новый сайт. Вы можете дать ему другое имя сейчас или вернуться позже и воспользоваться кнопкой Переименовать.

Заполните поле Хост именем или IP-адресом вашего FTP сервера. В выпадающем меню Шифрование выберите Требовать FTP через TLS.

Для параметра Тип входа выберите Запросить пароль, а так же введите имя пользователя в поле Пользователь.

Заполнение полей для подключения FTP

Нажмите кнопку Соединиться в нижней части интерфейса. Вам будет предложено ввести пароль пользователя:

Окно с полем для ввода пароля

Введите пароль и нажмите OK для подключения.

Вам будет представлен сертификат сервера, который выглядит следующим образом:

Сертифкат безопасности сервера

Необходимо нажать ОК и принять сертификат. После принятия сертификата вы должны быть подключены к вашему серверу с шифрованием TLS/SSL. Дважды щелкните папку files и перетащите файл proverka.txt влево, чтобы проверить, что вы можете скачивать файлы:

Скачивание текстового файла

Теперь щелкните правой кнопкой мыши на копии файла, который вы только что скачали и переименуйте его в proverka_upload.txt и перетащите ее обратно на сервер, чтобы проверить, что вы можете загружать файлы на сервер:

Загрузка текстового файла на сервер

Мы убедились, что можем безопасно и успешно передавать файлы на наш FTP сервер с включенным SSL/TLS шифрованием.

Шаг восьмой - Отключение доступа к SSH оболочке (опционально)

Если вы не можете использовать TLS из-за ограничений клиента, есть возможность добиться некоторой безопасности, лишив пользователя FTP возможности войти в систему любым другим способом. Одним из способов предотвращения доступа является создание альтернативной пользовательской оболочки. Хотя это не обеспечит никакого шифрования, все же стоит сделать это, чтобы ограничить доступ скомпрометированной учетной записи к файлам доступным по FTP.

Для начала создайте файл с именем ftponly в каталоге bin:

sudo nano /bin/ftponly

Добавьте в этот файл такие строки, это сообщение будет показано пользователю после подключения по SSH:

#!/bin/sh
echo "This account is limited to FTP access only."

Установка отображаемой записи послу успешного подключения по SSH

Сохраните файл и выйдите из редактора. Если вы использовали nano, вы можете выйти, нажав CTRL + X, Y, затем ENTER.

Затем измените разрешения на этот файл, чтобы сделать его исполняемым:

sudo chmod a+x /bin/ftponly

Установка разрешений на файл

После этого откройте список допустимых оболочек, этот список хранится в файле /etc/shells:

sudo nano /etc/shells

В самом низу этого списка добавьте строку:

/bin/ftponly

Сохраните файл и выйдите из редактора. Если вы использовали nano, вы можете выйти, нажав CTRL + X, Y, затем ENTER.

Установите оболочку пользователя с помощью следующей команды:

sudo usermod alex -s /bin/ftponly

Установка оболочки пользователя

Теперь попробуем войти на свой сервер по протоколу SSH под именем alex (замените 192.168.0.151 на IP адрес вашего сервера):

ssh alex@192.168.0.151

Мы получаем следующее сообщение:

Подключение к серверу по SSH

Пользователь больше не может подключаться по SSH на сервер и ограничен только FTP-доступом. Обратите внимание, если вы получили сообщение об ошибке при входе на сервер, это также может означать, что ваш сервер не принимает аутентификацию по паролю.

Заключение

В этом руководстве мы постарались объяснить, как настроить FTP для пользователей с локальной учетной записью, а также обезопасить ваш FTP сервер с использованием шифрования. Если вам необходимо использовать внешний источник аутентификации, вам стоит обратить внимание на поддержку виртуальных пользователей в vsftpd. Она предлагает богатый набор опций благодаря использованию PAM, подключаемых модулей аутентификации, и является хорошим выбором, если вы управляете пользователями в другой системе, например такой как LDAP или Kerberos. Вы также можете прочитать о возможностях vsftpd, последних выпусках и обновлениях на официальной странице проекта vsftpd.

 В дата-центре FREEhost.UA Вы можете заказать виртуальный сервер с панелью управления HestiaCP. Уже из коробки на сервере будет настроено программное обеспечение необходимое для работы на сервере по FTP и HTTP. Поэтому с сервером Вы сможете начать работать гораздо быстрей. Если появится желание выполнить настройку самостоятельно, на сервер может быть установлен шаблон только ОС Linux.

Подписывайтесь на наш телеграмм - канал t.me/freehostua, чтобы быть в курсе новых полезных материалов. Смотрите наш Youtube канал на youtube.com/freehostua.

Дата: 24.11.2021
Автор: Александр
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA