Установка и настройка FTP-сервера на Ubuntu, подключение vsFTPd в Linux

Установка и настройка FTP-сервера на Ubuntu

В инструкции расскажем, как поднять и настроить FTP-сервер на ОС Ubuntu.

FTP (File Transfer Protocol) — это протокол, который позволяет обмениваться файлами между клиентом и сервером.

Обновление системных пакетов

Перед установкой любого нового ПО рекомендуем обновлять системные пакеты до актуальных версий. Рассмотрим, какие команды для этого следует выполнить.

1. Обновление списка доступных пакетов и их версий:


    sudo apt update

2. Обновление установленных пакетов до последних версий:


    sudo apt upgrade -y

Теперь система готова к установке FTP-сервера.

Выбор FTP-сервера на Ubuntu

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

Существует несколько популярных FTP-серверов для Linux. Рассмотрим некоторые из них.

VSFTPD (Very Secure FTP Daemon)

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

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

ProFTPD (Professional FTP Daemon)

Преимущества: гибкие настройки, поддержка модулей, возможность использования конфигурации, похожей на Apache.

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

Pure-FTPd

Преимущества: легкость установки и использования, высокая производительность, поддержка виртуальных пользователей.

Недостатки: меньшее количество настроек безопасности по сравнению с VSFTPD и ProFTPD.

Что выбрали

Для демонстрации установки и настройки будем использовать VSFTPD по нескольким причинам.

  • Низкий ресурсный overhead. VSFTPD потребляет минимум ресурсов, что делает его идеальным для систем с ограниченными возможностями.
  • Высокая скорость передачи данных. Обеспечивает отличную производительность при передаче файлов, что важно для высоконагруженных серверов.
  • Встроенная поддержка шифрования для безопасной передачи данных — SSL/TLS.
  • Многоплатформенность. Работает на большинстве UNIX-подобных систем.
  • Простота интеграции с системами безопасности. Легко интегрируется с PAM и другими системами аутентификации для гибкого управления доступом.

Установка FTP-сервера на Ubuntu

Установка VSFTPD

VSFTPD прост в установке — он доступен в стандартных репозиториях Ubuntu. Откроем терминал и выполним следующую команду:


    sudo apt install vsftpd -y

Запуск и настройка автозагрузки VSFTPD

После установки запустим VSFTPD:


    sudo systemctl start vsftpd

Совет: для настройки автозагрузки VSFTPD при запуске системы выполните команду sudo systemctl enable vsftpd.

Проверка состояния VSFTPD

После запуска службы проверим ее состояние:


    sudo systemctl status vsftpd

В выводе отобразится текущий статус службы VSFTPD. Если она запущена корректно, мы увидим сообщение, что VSFTPD активен и работает (Active: active (running)).

Пример вывода sudo systemctl status vsftpd:


    ● vsftpd.service - vsftpd FTP server
     Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-06-23 14:35:26 UTC; 2h 15min ago
   Main PID: 12345 (vsftpd)
      Tasks: 1 (limit: 4915)
     Memory: 1.3M
     CGroup: /system.slice/vsftpd.service
             └─12345 /usr/sbin/vsftpd /etc/vsftpd.conf

Настройка файрвола для FTP

Если на сервере включен файрвол, следует открыть порты для FTP, чтобы обеспечить доступ к серверу.

В примере используем UFW (Uncomplicated Firewall). Команды далее могут отличаться в зависимости от вашего брандмауэра.


1. По умолчанию FTP использует порты 20 и 21 (TCP-трафик), а также диапазон 30000-31000 (пассивный режим FTP). Чтобы открыть их, выполним команды:


    sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 30000:31000/tcp

2. Перезапустим файрвол для применения изменений:


    sudo ufw reload

3. Убедимся, что правила файрвола применены корректно:


    sudo ufw status

Пример вывода sudo ufw status:


    Status: active

To                         Action      From
--                         ------      ----
20/tcp                     ALLOW       Anywhere
21/tcp                     ALLOW       Anywhere
30000:31000/tcp            ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere

Настройка FTP-сервера в Ubuntu

Основная настройка

Конфигурационный файл VSFTPD находится в директории /etc/vsftpd.conf. Чтобы его отредактировать, можно воспользоваться любым текстовым редактором, например nano:


    sudo nano /etc/vsftpd.conf

Для обеспечения безопасности и эффективности работы сервера изменим конфигурационный файл VSFTPD в соответствии с настройками.

1. Отключим анонимный доступ, заменив значение параметра anonymous_enable на NO:


    anonymous_enable=NO

2. Для разрешения входа на сервер локальным пользователям установим значение параметра local_enable на YES:


    local_enable=YES

3. Разрешим команды записи. Чтобы пользователи могли загружать файлы на сервер, установим значение параметра write_enable на YES:


    write_enable=YES

4. Настроим права доступа для новых файлов, создаваемых пользователями. Их автоматическое назначение осуществляется с помощью параметра local_umask. Значение 022 позволяет владельцу файла записывать, читать и выполнять, а всем остальным — читать и выполнять:


    local_umask=022

Набор прав состоит из трех цифр:

  • первая — права владельца,
  • вторая — права группы владельца,
  • третья — права остальных пользователей.

Каждая из них может принимать значения:

  • 0 — нет прав;
  • 1 — выполнение;
  • 2 — запись;
  • 3 — запись и выполнение;
  • 4 — чтение;
  • 5 — чтение и выполнение;
  • 6 — чтение и запись;
  • 7 — чтение, запись и выполнение.

Новые файлы и директории будут создаваться с правами, которые исходят из полного набора (777) за вычетом значений local_umask. Например, маска 022 означает набор прав 755.

5. Включим отображение приветственных сообщений при входе в директории:


    dirmessage_enable=YES

Для настройки текста сообщений следует перейти в интересующую директорию и создать в ней файл .message. Когда пользователь будет переходить в данную директорию, он будет получать сообщение, текст которого указан в файле.

6. Для корректной работы файрвола установим использование порта 20 для передачи данных:


    connect_from_port_20=YES

7. Чтобы ограничить пользователей их домашними директориями, установим значение параметра chroot_local_user на YES:


    chroot_local_user=YES
allow_writeable_chroot=YES

Параметр allow_writeable_chroot используется, чтобы разрешить запись в домашнюю директорию пользователя при использовании chroot_local_user=YES.

8. Зададим корневую директорию для каждого пользователя:


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

9. После внесения всех изменений сохраним файл (Ctrl+O в nano), закроем редактор (Ctrl+X в nano) и перезапустим службу VSFTPD для применения изменений:


    sudo systemctl restart vsftpd

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

1. Проверим корректность применения настроек. Для начала создадим тестового пользователя:


    sudo adduser testuser
sudo passwd testuser

2. Создадим необходимые директории и настроим на них права:


    sudo mkdir -p /home/testuser/ftp/upload
sudo chown nobody:nogroup /home/testuser/ftp
sudo chmod a-w /home/testuser/ftp
sudo chown -R testuser:testuser /home/testuser/ftp/upload

3. Добавим пользователя в список пользователей VSFTPD:


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

4. Подключимся к серверу с учетными данными тестового пользователя и убедимся в возможности загружать файлы в директорию /upload. Можно использовать любой FTP-клиент, в рамках инструкции будем пользоваться FileZilla.

Настройка часового пояса

Чтобы сервер использовал локальное время, откроем конфигурационный файл VSFTPD и установим параметр use_localtime на YES:


    use_localtime=YES

Настройка логов

Для настройки логирования перейдем в конфигурационный файл VSFTPD и включим логирование всех FTP-транзакций:


    xferlog_enable=YES
xferlog_std_format=YES

Параметр xferlog_std_format позволяет использовать стандартный формат логов.

Также следует указать корректный путь к файлу логов (обычно /var/log/vsftpd.log):


    xferlog_file=/var/log/vsftpd.log

Настройка PAM-сервиса

PAM (Pluggable Authentication Modules) — это система аутентификации, используемая в UNIX-подобных ОС, включая Linux. PAM позволяет администраторам настраивать политику аутентификации для различных приложений и служб. Для этого используется набор модулей, которые могут быть включены и настроены по мере необходимости. 

Для использования PAM необходимо предварительно включить его в файле /etc/vsftpd.conf.

1. Откроем файл /etc/vsftpd.conf:


    sudo nano /etc/vsftpd.conf

2. Отредактируем строку pam_service_name:


    pam_service_name=vsftpd

Для дальнейшей настройки сервиса PAM в VSFTPD следует внести изменения в файл /etc/pam.d/vsftpd. Внутри него — инструкции, которые PAM использует для управления аутентификацией пользователей при подключении к FTP-серверу. 

3. Откроем файл конфигурации PAM для VSFTPD:


    sudo nano /etc/pam.d/vsftpd

4. Настроим параметры аутентификации в соответствии со списком:


    auth    required    pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth    required    pam_shells.so
auth    include     common-auth
account include     common-account
session include     common-session
  • auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed — отказывает в доступе пользователям из файла /etc/vsftpd.ftpusers.
  • auth required pam_shells.so — проверяет, что оболочка пользователя разрешена.
  • auth include common-auth — включает общие правила аутентификации.
  • account include common-account — включает общие правила управления учетными записями.
  • session include common-session — включает общие правила управления сеансами.

5. Создадим файл списка пользователей:


    sudo nano /etc/vsftpd.ftpusers

Добавим имена пользователей, которым следует запретить доступ (по одному на строку).

6. Перезапустим службу VSFTPD:


    sudo systemctl restart vsftpd

Создание пользователей

Создание

Для создания нового пользователя на сервере выполним команду:


    sudo adduser ftpuser

Далее следует ввести пароль для нового пользователя и несколько дополнительных данных (имя, номер телефона и прочее). Можно оставить эти поля пустыми, нажав Enter.

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

Настройка домашних папок

1. Создадим домашнюю папку пользователя:


    sudo mkdir -p /home/ftpuser/ftp 

2. Домашний каталог пользователя должен быть защищен от записи, чтобы соблюсти требования безопасности VSFTPD:


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

3. Далее создадим папку, в которую пользователь сможет загружать файлы, и настроим права доступа:


    sudo mkdir -p /home/ftpuser/ftp/upload
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp/upload
sudo chmod -R 0755 /home/ftpuser/ftp/upload

Настройка анонимного или только авторизованного доступа

VSFTPD поддерживает доступ как анонимных, так и авторизованных пользователей. Для настройки политики следует внести изменения в конфигурационный файл.

Анонимный доступ

Если нам нужно разрешить анонимный доступ к FTP-серверу, следует указать для параметра anonymous_enable значение YES в конфигурационном файле /etc/vsftpd.conf:


    anonymous_enable=YES

Авторизованный доступ

Чтобы разрешить доступ к FTP-серверу авторизованным пользователям, укажем для параметра local_enable значение YES:


    local_enable=YES

Разрешение / запрет доступа по SSH

Все настройки доступа к серверу по SSH находятся в конфигурационном файле /etc/ssh/sshd_config. В нем описываются разрешающие и запрещающие правила.

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


    AllowGroups ftpusers

    DenyGroups ftpusers

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


    AllowUsers ftpuser

    DenyUsers ftpuser

Группа ftpusers и пользователь ftpuser указаны в качестве примера.

Для применения новых правил перезапустим службу SSH:


    sudo systemctl restart ssh

Порядок правил, указанных в конфигурационном файле SSH, имеет важное значение в определении политики доступа пользователя. Например, первым указано правило, запрещающее пользователям группы ftpusers доступ по SSH, а затем указано правило, разрешающее доступ пользователю ftpuser1 (входящему в группу ftpusers). 

В таком случае у пользователя ftpuser1 будет доступ к серверу по SSH. При установке этих правил в обратном порядке, пользователь ftpuser1 не получит доступ по SSH.

Настройка SSL/TLS

Обеспечение безопасности FTP-соединений может обеспечить SSL/TLS-протокол.  

1. Создадим директорию,  в которой будут храниться SSL-сертификаты и ключи:


    sudo mkdir /etc/ssl/private

2. Создадим самоподписанный сертификат:


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

Ключ будет действителен в течение 10 лет.

В процессе генерации будет предложено ввести информацию о сертификате: страну, город, организацию и т. д. Можно оставить некоторые поля пустыми, нажав Enter.

3. Для использования созданного сертификата откроем конфигурационный файл VSFTPD:


    sudo nano /etc/vsftpd.conf

4. Внесем в него изменения в соответствии со следующим списком:


    rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
  • rsa_cert_file и rsa_private_key_file — указывают путь к сертификату и приватному ключу.
  • ssl_enable=YES — включает SSL.
  • allow_anon_ssl=NO — запрещает анонимный доступ через SSL.
  • force_local_data_ssl=YES и force_local_logins_ssl=YES — требуют использование SSL для всех данных и логинов локальных пользователей.
  • ssl_tlsv1=YES, ssl_sslv2=NO, ssl_sslv3=NO — включают TLSv1 и отключают устаревшие SSLv2 и SSLv3.
  • require_ssl_reuse=NO — отключает требование повторного использования SSL-сессий.
  • ssl_ciphers=HIGH — устанавливает использование только сильных шифров.

5. После внесения изменений сохраним файл и перезапустим службу VSFTPD:


    sudo systemctl restart vsftpd

При установке SSL/TLS-сертификатов подключение через FTP-клиенты осуществляется стандартным путем.

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

Теперь FTP-сервер настроен и готов принимать безопасные соединения от клиентов.

Популярные программы, позволяющие подключаться к FTP-серверам, — FileZilla, WinSCP, FAR Manager, Total Commander, Midnight Commander и Cyberduck. Далее будем использовать наиболее известный кроссплатформенный FTP-клиент — FileZilla.

Для его установки в Ubuntu выполним команду:


    sudo apt-get install filezilla

Для подключения к FTP-серверу следует заполнить поля Хост (IP-адрес сервера), Имя пользователя, Пароль и нажать на кнопку Быстрое соединение. После подключения к FTP-серверу в правой части окна появится список директорий, доступных для данного пользователя.

FTP-сервер в Selectel

Selectel предоставляет услугу аренды виртуальных FTP-серверов. Рассмотрим основные преимущества.

  • Безопасный обмен данными. Облачные серверы Selectel развертываются в дата-центрах уровня Tier III и соответствуют требованиям 152-ФЗ, что обеспечивает высокий уровень безопасности и надежности при передаче данных между сотрудниками.
  • Автоматическое резервное копирование по расписанию. Вы можете создать план бэкапов и задать параметры хранения, чтобы гарантировать сохранность данных.
  • Управление правами пользователей. Система управления доступом (IAM) позволяет настраивать права пользователей для обеспечения безопасности данных. Также доступна настройка федерации для входа через SSO.
  • Удобное управление сервером. Панель управления Selectel позволяет быстро настроить FTP-сервер как фиксированной, так и произвольной конфигурации с нужным соотношением ресурсов. Кроме того, в панели управления можно в несколько кликов изменить ресурсы существующего сервера для адаптации к изменяющимся требованиям.

Если вам нужно только хранить данные, советуем обратить внимание на облачное объектное хранилище с поддержкой FTP-протокола. Аренда облачного хранилища чаще всего обходится дешевле, так как стоимость считается по потреблению ресурсов.

Заключение

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