Как установить и настроить FTP-сервер (vsftpd) с SSL/TLS в Ubuntu 20.04
Это руководство существует для этих версий ОС
- Ubuntu 18.04 (Бионический бобер)
На этой странице
- Предпосылки
- Шаг 1. Установите vsftpd
- Шаг 2. Настройка брандмауэра
- Шаг 3. Настройка vsftpd
- 1. FTP-доступ
- 2. Включение загрузки файлов
- 3. Чрутская тюрьма
- 4. Пассивный FTP
- 5. Ограничение пользователей
- Шаг 1. Добавьте нового пользователя.
- Шаг 2. Добавьте пользователя в список разрешенных пользователей FTP.
- Шаг 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.
-
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 directoryupload
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
-
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.
Если у вас есть вопросы, задавайте их в комментариях ниже.