Поиск по сайту:

Как установить и настроить FTP-сервер (vsftpd) с SSL/TLS в Ubuntu 20.04


Это руководство существует для этих версий ОС

  • Ubuntu 18.04 (Бионический бобер)

На этой странице

  1. Предпосылки
  2. Шаг 1. Установите vsftpd
  3. Шаг 2. Настройка брандмауэра
  4. Шаг 3. Настройка vsftpd
    1. 1. FTP-доступ
    2. 2. Включение загрузки файлов
    3. 3. Чрутская тюрьма
    4. 4. Пассивный FTP
    5. 5. Ограничение пользователей

    1. Шаг 1. Добавьте нового пользователя.
    2. Шаг 2. Добавьте пользователя в список разрешенных пользователей FTP.
    3. Шаг 3. Создайте каталог FTP и файлов

    FTP или протокол передачи файлов — очень старый известный протокол для передачи файлов между клиентом и сервером. Это также небезопасный протокол, но только при использовании без TLS. В этом руководстве мы настроим vsftpd для TLS, что позволит нам безопасно использовать FTP. В наши дни FTP часто заменяют более безопасными протоколами, такими как SFTP или SCP.

    Однако, если вам нужно использовать FTP с вашим сервером, vsftpd (Very Secure FTP Daemon) — идеальный выбор.

    В этом руководстве мы узнаем, как установить и настроить FTP-сервер с помощью vsftpd на сервере под управлением Ubuntu 20.04. Мы также узнаем, как защитить соединение с помощью протокола SSL/TLS.

    Предпосылки

    • Сервер Ubuntu 20.04 с пользователем без полномочий root, имеющим права sudo.

    Шаг 1 - Установите vsftpd

    Первый шаг — установить vsftpd.

    $ sudo apt update
    $ sudo apt install vsftpd
    

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

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

    Шаг 2. Настройте брандмауэр

    На этом этапе мы настроим брандмауэр UFW, чтобы разрешить доступ к портам FTP.

    Во-первых, давайте проверим состояние брандмауэра.

    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    Как мы видим, пока разрешены только SSH-порты. Давайте откроем порты 20 (командный порт FTP), 21 (порт данных FTP), 990, когда мы используем TLS, и порты 35000-40000 для диапазона пассивных портов, которые нам могут понадобиться в будущем.

    $ sudo ufw allow 20:21/tcp
    $ sudo ufw allow 990/tcp
    $ sudo ufw allow 35000:40000/tcp
    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere
    990/tcp                    ALLOW       Anywhere
    20:21/tcp                  ALLOW       Anywhere
    35000:40000/tcp            ALLOW       Anywhere
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    20:21/tcp (v6)             ALLOW       Anywhere (v6)
    990/tcp (v6)               ALLOW       Anywhere (v6)
    35000:40000/tcp (v6)       ALLOW       Anywhere (v6)
    

    Шаг 3 — Настройка vsftpd

    Теперь мы рассмотрим некоторые важные настройки, необходимые для работы vsftpd.

    Начните с открытия файла конфигурации.

    $ sudo nano /etc/vsftpd.conf
    

    1. FTP-доступ

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

    anonymous_enable=NO
    local_enable=YES
    

    2. Включение загрузки файлов

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

    write_enable=YES
    

    3. Тюрьма Чрут

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

    chroot_local_user=YES
    

    Чтобы предотвратить любую уязвимость в системе безопасности, chroot, когда он включен, не будет работать, пока пользователи каталога доступны для записи.

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

    1. Method 1 - This method works by using a different directory for FTP uploads. For this tutorial, we will create an ftp directory inside the user's home to serve as the chroot and a second writable directory upload for uploading the files. To achieve this, add the following lines at the bottom of the file.

      user_sub_token=$USER
      local_root=/home/$USER/ftp
      
    2. Method 2 - The second method is to simply grant writable access to the home directory as a whole. Add the following line to achieve this.

      allow_writeable_chroot=YES
      

    4. Пассивный FTP

    vsftpd может использовать любой порт для пассивных FTP-подключений. Мы можем указать диапазон для минимального и максимального номера порта, который может использовать vsftpd. Это порты, которые мы ранее настроили в нашем брандмауэре UFW.

    Добавьте следующие строки, чтобы разрешить пассивные FTP-соединения.

    pasv_min_port=35000
    pasv_max_port=40000
    

    5. Ограничение пользователей

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

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

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

    Перезапустите vsftpd, чтобы активировать конфигурацию.

    $ sudo systemctl restart vsftpd
    

    Шаг 4 — Настройка пользовательского каталога

    Для целей этого руководства мы создадим новую учетную запись пользователя для транзакций FTP. Если у вас уже есть учетная запись пользователя для этой цели, вы можете пропустить шаг 1. Кроме того, если вы ранее установили allow_writeable_chroot=YES в файле конфигурации, вы можете пропустить шаг 3.

    Шаг 1 - Добавьте нового пользователя.

    $ sudo adduser testuser
    

    Установите надежный пароль и пропустите все остальные подсказки.

    Шаг 2. Добавьте пользователя в список разрешенных пользователей FTP.

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

    Шаг 3 — Создайте каталог FTP и файлов

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

    Создайте FTP-папку.

    $ sudo mkdir /home/testuser/ftp
    

    Установите его право собственности.

    $ sudo chown nobody:nogroup /home/testuser/ftp
    

    Удалите права на запись.

    $ sudo chmod a-w /home/testuser/ftp
    

    Перед продолжением проверьте разрешения.

    $ sudo ls -al /home/testuser/ftp
    total 8
    dr-xr-xr-x 2 nobody   nogroup  4096 Jun  7 13:08 .
    drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
    

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

    $ sudo mkdir /home/testuser/ftp/upload
    $ sudo chown testuser:testuser /home/testuser/ftp/upload
    

    Проверьте разрешения.

    $ sudo ls -al /home/testuser/ftp
    total 12
    dr-xr-xr-x 3 nobody   nogroup  4096 Jun  7 13:10 .
    drwxr-xr-x 3 testuser testuser 4096 Jun  7 13:08 ..
    drwxr-xr-x 2 testuser testuser 4096 Jun  7 13:10 upload
    

    Наконец, добавим файл test.txt для тестирования.

    $ echo "vsftpd test file" | sudo tee /home/testuser/ftp/upload/test.txt
    

    Шаг 5. Проверка FTP-доступа

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

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

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): anonymous
    530 Permission denied.
    ftp: Login failed.
    ftp>
    

    Закройте соединение.

    ftp> bye
    

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

    Давайте попробуем подключиться как любой другой пользователь sudo. Тоже не должно подключаться.

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): sudo_user
    530 Permission denied.
    ftp: Login failed.
    ftp>
    

    Закройте соединение.

    ftp> bye
    

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

    $ ftp -p 136.244.105.99
    Connected to 136.244.105.99.
    220 (vsFTPd 3.0.3)
    Name (136.244.105.99:default): testuser
    331 Please specify the password.
    Password: your_user's_password
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>
    

    Давайте переключимся в каталог upload и воспользуемся командой get для передачи тестового файла на наш локальный компьютер.

    ftp> cd upload
    250 Directory successfully changed.
    ftp> get test.txt
    227 Entering Passive Mode (136,244,105,99,165,42).
    150 Opening BINARY mode data connection for test.txt (17 bytes).
    226 Transfer complete.
    16 bytes received in 0.0101 seconds (164.3719 kB/s)
    ftp>
    

    Затем давайте загрузим файл с новым именем, используя команду put, чтобы проверить права на запись.

    ftp> put test.txt upload.txt
    227 Entering Passive Mode (136,244,105,99,163,102).
    150 Ok to send data.
    226 Transfer complete.
    17 bytes sent in 0.000894 seconds (518.7988 kB/s)
    

    Закройте соединение.

    ftp> bye
    

    Шаг 6. Защита передачи с помощью SSL/TLS

    Чтобы зашифровать FTP-передачи, нам нужно иметь SSL-сертификат и настроить vsftpd для его использования.

    Если у вас уже есть домен или субдомен, указывающий на ваш FTP-сервер, вы можете создать бесплатный SSL-сертификат Lets Encrypt и использовать его.

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

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

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

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

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

    $ sudo nano /etc/vsftpd.conf
    

    Найдите следующие строки и закомментируйте их, поставив перед ними решетку следующим образом.

    # rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
    # rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
    

    Теперь добавьте следующие строки.

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

    Кроме того, измените значение ssl_enable на YES.

    ssl_enable=YES
    

    Давайте добавим еще несколько настроек для повышения безопасности SSL.

    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
    

    Большинство этих настроек говорят сами за себя. Они отключают SSL для анонимных пользователей и требуют SSL как для передачи данных, так и для входа в систему. Мы также отключили небезопасные протоколы SSL и будем придерживаться TLSv1.0. И, наконец, мы отключили повторное использование SSL и требуем комплекты шифров High Encryption.

    Перезапустите сервер, чтобы настройки вступили в силу.

    $ sudo systemctl restart vsftpd
    

    Теперь вы не сможете использовать FTP через командную строку. Вам нужно будет подключиться с помощью клиента, который поддерживает TLS.

    Шаг 7. Тестирование TLS с помощью FileZilla

    В нашем руководстве мы проверим возможности TLS с помощью Filezilla.

    Когда вы открываете Filezilla, щелкните значок диспетчера сайтов прямо над словом Host в верхней строке.

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

    Вы увидите новую иконку с названием Новый сайт. Вы можете переименовать его с помощью кнопки «Переименовать».

    Заполните поле Хост IP-адресом вашего сервера. Поскольку наш FTP-порт равен 21, который является портом по умолчанию для FTP, вы можете оставить поле порта пустым. Для параметра «Шифрование» выберите «Требовать явный FTP через TLS» в раскрывающемся меню.

    Заполните свое имя пользователя и пароль FTP теми, которые мы создали выше. Нажмите кнопку Подключить, чтобы продолжить.

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

    Вы можете установить флажок Всегда доверять этому сертификату в будущих сеансах. чтобы вас не спрашивали каждый раз при входе в систему. Нажмите «ОК», чтобы продолжить.

    Теперь вы можете выполнять обычные операции FTP.

    Шаг 8 — Отключить доступ к оболочке

    Этот шаг совершенно необязателен. По умолчанию при создании пользователя FTP, если это не указано явно, пользователь будет иметь доступ к серверу по SSH.

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

    Создайте оболочку /bin/ftponly и сделайте ее исполняемой.

    $ echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
    $ sudo chmod a+x /bin/ftponly
    

    Добавьте новую оболочку в список допустимых оболочек в файле /etc/shells.

    $ echo "/bin/ftponly" | sudo tee -a /etc/shells
    

    Измените оболочку пользователя на /bin/ftponly.

    $ sudo usermod newftpuser -s /bin/ftponly
    

    Вы можете использовать ту же команду, чтобы изменить оболочку всех пользователей, которым вы хотите предоставить доступ к FTP.

    Заключение

    На этом мы завершаем наше руководство, в котором мы установили и настроили vsftpd для установки FTP-сервера на сервер на базе Ubuntu 20.04. Мы также настроили наше FTP-соединение для работы с использованием SSL/TLS.

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