Оглавление:
- Введение
- Необходимые условия
- Установка vsftpd
- Настройка брандмауэра
- Подготовка пользовательской директории
- Настройка vsftpd.conf
- Проверка подключения к FTP серверу
- Защита подключения
- Тестирование защищенного подключения с помощью FileZilla
- Отключение доступа к SSH оболочке (опционально)
- Заключение
Введение
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
После завершения установки сделайте копию файла конфигурации, чтобы можно было начать с пустой конфигурации, сохранив при этом оригинал в качестве резервной копии:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.orig
Теперь, имея резервную копию файла конфигурации vsftpd, можно приступить к настройке брандмауэра.
Шаг второй - Настройка брандмауэра (фаервола)
Для начала, давайте проверим состояние брандмауэра, чтобы узнать, включен ли он. Если включен, необходимо откорректировать его настройки, чтобы FTP соединения были разрешены, иначе правила брандмауэра по умолчанию будут блокировать подключения по FTP.
Проверьте состояние брандмауэра введя в командной строке:
sudo ufw status
В данном случае брандмауэр выключен и не используется, о чем нам сообщает система. Если вы не используете брандмауэр можно пропустить этот шаг. Но предпочтительнее все же настроить и активировать брандмауэр, поэтому активируем его и настроим правила.
Активация брандмауэра
Первым правилом необходимо разрешить подключения к нашему серверу по протоколу SSH, иначе после активации брандмауэра мы потеряем возможность подключаться к серверу. Чтобы настроить сервер на разрешение входящих SSH-соединений, введите команду:
sudo ufw allow ssh
После этого вернем правила ufw к значениям по умолчанию, то есть блокировать все входящие соединения и разрешить все исходящие, для этого просто вводим две команды последовательно, одну за другой:
sudo ufw default deny incoming sudo ufw default allow outgoing
Ну и напоследок, активируем сам брандмауэр 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
Затем откроем порты 40000-50000 это диапазон пассивных портов для FTP, которые мы потом укажем в конфигурационном файле vsftpd:
Проверим, что у нас получилось в итоге, для этого введем команду:
sudo ufw status verbose
Теперь вывод правил брандмауэра должен выглядеть примерно следующим образом:
Когда vsftpd установлен и открыты необходимые порты в брандмауэре, пришло время создать специального FTP-пользователя.
Шаг третий - Подготовка пользовательской директории
На этом этапе вы создадите специального пользователя для FTP. Однако, возможно у вас уже есть пользователь или пользователи, которым нужен доступ по FTP. В этом руководстве описано как сохранить доступ существующих пользователей к их данным, но, несмотря на это, мы рекомендуем вам начать с нового отдельного FTP-пользователя, пока вы не настроите и не протестируете свою установку, прежде чем перенастраивать существующих пользователей.
Добавляем тестового пользователя, для этого введем команду:
sudo adduser alex
Когда появится запрос, установите пароль для данного пользователя. Далее можно смело нажимать ENTER, чтобы пропустить следующие вопросы, поскольку эти детали не важны для нас сейчас.
Хорошей практикой считается ограничение пользователей FTP определенным каталогом, в vsftpd это реалируется с помощью chroot jails. Когда chroot включен, локальные пользователей будут по умолчанию ограничены своим домашним каталогом. Поскольку vsftpd защищает каталог особым образом, он не должен быть доступен для записи пользователю. Это подходит для новых пользователей, которые должны подключаться только по FTP, но существующим пользователям, у которых есть доступ и к SSH, может потребоваться запись и в домашнюю директорию.
В этом примере, вместо того чтобы удалять права на запись для домашнего каталога, мы создадим каталог ftp, который будет служить chroot директорией, и каталог файлов files с возможностью записи в него для хранения файлов.
Создайте директорию ftp:
sudo mkdir /home/alex/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
И дадим нашему пользователю права владельца на данную директорию:
sudo chown alex:alex /home/alex/ftp/files
После чего проверим нашу директорию ftp чтобы удостовериться что мы не допустили ошибок в настройках прав доступа.
sudo ls -la /home/alex/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. Для этого надо удалить символ решетки (#) перед этой директивой:
Так же разкомментируйте директиву chroot_local_user, чтобы предотвратить доступ пользователя подключенного по FTP, к файлам или директориям за пределами домашней директории:
Затем добавьте директиву user_sub_token, значением которой является переменная окружения $USER. Так же добавьте директиву local_root и укажите путь /home/$USER/ftp, который также включает переменную окружения $USER. Эти директивы делают так, что пользователи при входе в систему будут перенаправляться в свой домашний каталог. Добавьте эти настройки в конец файла конфигурации:
user_sub_token=$USER local_root=/home/$USER/ftp
Обозначьте диапазон портов, которые будут использоваться для пассивного FTP, чтобы обеспечить достаточное количество соединений. Это как раз те порты которые мы указывали в конфигурации брандмауэра. Добавляем эти настройки в конец файла конфигурации vsftpd.conf:
pasv_min_port=40000 pasv_max_port=50000
Чтобы разрешить доступ к 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
Когда конфигурация создана и демон перезапущен для применения настроек, настало время протестировать доступ к нашему FTP серверу.
Шаг пятый - Проверка подключения к FTP серверу
Мы настроили наш FTP сервер так, чтобы разрешить подключения только пользователю alex. Мы отключили анонимный FTP доступ, давайте проверим это, попытавшись подключиться анонимно. Если конфигурация настроена правильно, анонимным пользователям будет отказано в доступе на FTP сервер. Откройте еще одно окно командной строки и выполните команду для подключения к серверу по протоколу FTP - ftp 192.168.0.151. Обязательно замените 192.168.0.151 на публичный IP-адрес вашего сервера:
Когда появится запрос на ввод имени пользователя, попробуйте войти в систему под несуществующим пользователем, например anonymous, и вы получите следующее сообщение:
Закройте соединение, введя команду bye:
Пользователи, отличные от alex, также не смогут подключиться. Попробуйте подключиться от имени вашего пользователя, который обладает правами sudo в системе. Ему также должно быть отказано в доступе, и это должно произойти до того, как Вы введете пароль:
Пользователь alex в свою очередь наоборот, должен иметь возможность подключаться, читать и записывать файлы. Давайте попробуем подключиться под назначенным вами пользователем:
Перейдем в директорию files и скачаем наш тестовый файл proverka.txt, для этого необходимо ввести команду cd files для перехода в директорию files, после чего ввести команду ls для вывода списка содержимого данной директории и затем get proverka.txt для скачивания файла.
Теперь попробуем закачать файл на FTP сервер с новым именем, чтобы проверить работоспособность загрузки и права на запись. Для загрузки файла на ФТП сервер необходимо после подключения ввести команду put proverka.txt zagruzka.txt, где proverka.txt имя нашего файла который у нас существует, а zagruzka.txt это имя файла под которым он будет загружен на сервер:
put proverka.txt zagruzka.txt
Закроем соединение и выйдем с 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 адрес вашего сервера или его имя (хостнейм) по которому вы будете к нему подключаться:
После того как вы создали сертификаты, снова откройте конфигурационный файл vsftpd:
sudo nano /etc/vsftpd.conf
В нижней части файла будут две строки, начинающиеся с 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 и требовать 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
На данном этапе вы больше не сможете подключиться с помощью небезопасного FTP клиента командной строки, как делали это ранее по примеру в данной статье. Если вы попытаетесь подключится, то получите такое сообщение об ошибке:
Теперь настал час проверить, сможем ли мы подключиться с помощью клиента поддерживающего TLS, например FileZilla.
Шаг седьмой - Тестирование защищенного подключения с помощью FileZilla
Большинство современных FTP-клиентов могут быть настроены на использование шифрования TLS. В данной статье мы продемонстрируем подключение с помощью FileZilla из-за его кроссплатформенной поддержки. Если вы используете другие FTP клиенты, пожалуйста обратитесь к их документации.
Когда вы впервые откроете FileZilla, найдите значок Менеджер Сайтов, расположенный над словом Хост, самый левый значок в верхнем ряду. Нажмите на него и откройте Менеджер Сайтов:
Откроется новое окно. Нажмите кнопку Новый сайт в правом нижнем углу:
В разделе Мои сайты появится новый пункт с надписью Новый сайт. Вы можете дать ему другое имя сейчас или вернуться позже и воспользоваться кнопкой Переименовать.
Заполните поле Хост именем или IP-адресом вашего FTP сервера. В выпадающем меню Шифрование выберите Требовать FTP через TLS.
Для параметра Тип входа выберите Запросить пароль, а так же введите имя пользователя в поле Пользователь.
Нажмите кнопку Соединиться в нижней части интерфейса. Вам будет предложено ввести пароль пользователя:
Введите пароль и нажмите 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."
Сохраните файл и выйдите из редактора. Если вы использовали 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 на сервер и ограничен только 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