Как установить и настроить VSFTPD в Ubuntu 18.04 LTS

12 set 2022 9 min di lettura
Как установить и настроить VSFTPD в Ubuntu 18.04 LTS
Indice dei contenuti

Введение

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

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

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

Если вы намерены установить VSFTP на удаленный сервер, продолжайте чтение, в противном случае, если вы хотите установить VSFTP на локальный компьютер, пропустите первый абзац «Подключение к серверу» и прочитайте следующий.

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

Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется пароль для аутентификации.

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

ssh root@IP_DEL_SERVER

Далее вам будет предложено ввести пароль пользователя root.

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

ssh VOSTRO_UTENTE@IP_DEL_SERVER

Затем вам будет предложено ввести пароль пользователя.

Теперь вы подключены к своему серверу и готовы начать установку VSFTP на Ubuntu 18.04 LTS.

Установить VSFTP

VSFTP доступен по умолчанию в официальном репозитории Ubuntu. Обновите список пакетов:

sudo apt update

Установите VSFTPD:

sudo apt install vsftpd

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

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

Настройте брандмауэр (UFW)

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

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

sudo ufw status

Вы должны получить выходное сообщение, подобное следующему:


Status: active

 To Action From
 -- ------ ----
 OpenSSH ALLOW Anywhere
 OpenSSH (v6) ALLOW Anywhere (v6)

Добавьте правила для FTP-трафика.

Откройте порты 20 и 21 для FTP, порт 990 для TLS и порты 40000 и 50000 для диапазона пассивных портов, которые мы намерены установить в файле конфигурации:

sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw status

Снова проверьте брандмауэр, чтобы увидеть новые открытые порты: Вы должны получить выходное сообщение, подобное следующему:


Status: active

 To Action From
 -- ------ ----
 OpenSSH ALLOW Anywhere
 990/tcp ALLOW Anywhere
 20/tcp ALLOW Anywhere
 21/tcp ALLOW Anywhere
 40000:50000/tcp ALLOW Anywhere
 OpenSSH (v6) ALLOW Anywhere (v6)
 20/tcp (v6) ALLOW Anywhere (v6)
 21/tcp (v6) ALLOW Anywhere (v6)
 990/tcp (v6) ALLOW Anywhere (v6)
 40000:50000/tcp (v6) ALLOW Anywhere (v6)

Настройка каталога для пользователя

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

Создайте нового пользователя:

sudo adduser grok

Назначьте пароль при появлении запроса.

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

Создайте каталог ftp для использования в качестве chroot:

sudo mkdir /home/grok/ftp

Установите владельца папки:

sudo chown nobody:nogroup /home/grok/ftp

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

sudo chmod aw /home/grok/ftp

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

sudo ls -la /home/grok/ftp

Вы должны получить выходное сообщение, подобное следующему:


total 8
 dr-xr-xr-x 2 nobody nogroup 4096 Apr 18 20:44.
 drwxr-xr-x 3 grok grok 4096 Apr 18 21:09..

Создайте папку для загружаемых файлов:

sudo mkdir /home/grok/ftp/files

Установите владельца новой папки:

sudo chown grok:grok /home/grok/ftp/files

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

sudo ls -la /home/grok/ftp

Вы должны получить выходное сообщение, подобное следующему:


total 12
 dr-xr-xr-x 3 nobody nogroup 4096 Apr 18 20:44.
 drwxr-xr-x 5 grok grok 4096 Apr 18 21:09..
 drwxr-xr-x 2 grok grok 4096 Apr 18 21:08 files

Создайте тестовый файл:

echo "vsftpd file di test" | sudo tee /home/grok/ftp/files/test.txt

Настроить FTP-доступ

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

Откройте файл конфигурации vsftpd:

sudo nano /etc/vsftpd.conf
...
 # Allow anonymous FTP? (Disabled by default).
 anonymous_enable=NO
 #
 # Uncomment this to allow local users to log in.
 local_enable=YES...

Затем разрешите пользователю загружать файлы, раскомментировав (если он закомментирован) параметр write_enable:

...
 write_enable=YES...

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

...
 chroot_local_user=YES...

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

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

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

...
 pasv_min_port=40000
 pasv_max_port=50000

ВНИМАНИЕ: При настройке брандмауэра мы открыли установленные здесь порты для диапазона пассивных портов. Если вы меняете значения, обязательно обновите настройки брандмауэра.

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

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

userlist_deny Если установлено значение YES, пользователям из списка будет отказано в доступе к FTP. Если установлено значение NO, только пользователи из списка могут войти в систему.

Сохраните и закройте файл. Чтобы сохранить файл в текстовом редакторе nano, нажмите Ctrl + O, затем нажмите Enter, чтобы подтвердить имя записываемого файла. Чтобы закрыть файл, нажмите Ctrl + X.)

Наконец, давайте добавим нашего пользователя в /etc/vsftpd.userlist:

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

Убедитесь, что он был добавлен правильно:

cat /etc/vsftpd.userlist

Вы должны получить выходное сообщение, подобное следующему:

...
 grok

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

sudo systemctl restart vsftpd

Тест доступа к FTP

Мы настроили сервер так, чтобы только пользователь grok мог подключаться через FTP. Убедитесь, что он работает так, как ожидалось.

Анонимным пользователям не нужно входить в систему, мы отключили анонимный доступ. Анонимным пользователям должно быть отказано в доступе. Откройте другое окно терминала и выполните следующую команду. Убедитесь, что вы заменили 103.1.233.1 общедоступным IP -адресом вашего сервера:

ftp -p 103.1.233.1

Вы должны получить выходное сообщение, подобное следующему:


Connected to 103.1.233.1.
 220 (vsFTPd 3.0.3)
 Name (103.1.233.1:root): anonymous
 530 Non-anonymous sessions must use encryption.
 Login failed.
 421 Service not available, remote server has closed connection
 ftp>

Закрыть сессию, написать:

bye

Если, с другой стороны, вы попытаетесь войти в систему с другим пользователем с привилегиями sudo:

ftp -p 103.1.233.1

Вы должны получить выходное сообщение, подобное следующему:


Connected to 103.1.233.1.
 220 (vsFTPd 3.0.3)
 Name (103.1.233.1:default): sudo_user
 530 Permission denied.
 ftp: Login failed.
 ftp>

Закрыть сессию, написать:

bye

С другой стороны, пользователь grok должен иметь возможность подключаться, читать и записывать файлы:

ftp -p 103.1.233.1

Вы должны получить выходное сообщение, подобное следующему:


Connected to 103.1.233.1.
 220 (vsFTPd 3.0.3)
 Name (103.1.233.1:default): grok
 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>

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

cd files
get test.txt

Вы должны получить выходное сообщение, подобное следующему:


227 Entering Passive Mode (195,201,18,78,176,56).
 150 Opening BINARY mode data connection for test.txt (17 bytes).
 226 Transfer complete.
 17 bytes received in 0.00 secs (218.4416 kB/s)

Затем мы загружаем файл с новым именем, чтобы проверить права на запись:

put test.txt upload.txt

Вы должны получить выходное сообщение, подобное следующему:


227 Entering Passive Mode (195,201,18,78,161,23).
 150 Ok to send data.
 226 Transfer complete.
 17 bytes sent in 0.00 secs (353.2247 kB/s)

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

bye

Безопасные переводы

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

Используйте openssl для создания нового сертификата и используйте параметр -days, чтобы сделать его действительным в течение одного года. В той же команде добавьте 2048-битный закрытый ключ RSA. Установив для параметров -keyoute и -out одинаковое значение, закрытый ключ и сертификат будут находиться в одном файле:

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

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

Вы должны получить выходное сообщение, подобное следующему:


Generating a 2048 bit RSA private key............................................................................+++...........+++
 writing new private key to '/etc/ssl/private/vsftpd.pem'
 -----
 You are about to be asked to enter information that will be incorporated
 into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 Country Name (2 letter code) [AU]:IT
 State or Province Name (full name) [Some-State]:MI
 Locality Name (eg, city) []:Milano
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Noviello
 Organizational Unit Name (eg, section) []:
 Common Name (eg server FQDN or YOUR name) []: INDIRIZZO_IP_DEL_TUO_SERVER
 Email Address []:

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

sudo nano /etc/vsftpd.conf

Ближе к концу файла закомментируйте две строки, начинающиеся с rsa_:

...
 # 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, измените ssl_enable на YES:

...
 ssl_enable=YES...

Затем добавьте следующие строки, чтобы явно запретить анонимные подключения через 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...

Наконец, запросите «высокие» наборы шифров, которые в настоящее время означают длину ключа, равную или превышающую 128 бит:

...
 require_ssl_reuse=NO
 ssl_ciphers=HIGH...

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

...
 #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
 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

Сохраните и закройте файл. Чтобы сохранить файл в текстовом редакторе nano, нажмите Ctrl + O, затем нажмите Enter, чтобы подтвердить имя записываемого файла. Чтобы закрыть файл, нажмите Ctrl + X.)

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

sudo systemctl restart vsftpd

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

ftp -p 103.1.233.1

Connected to 103.1.233.1.
 220 (vsFTPd 3.0.3)
 Name (103.1.233.1:default): grok
 530 Non-anonymous sessions must use encryption.
 Login failed.
 421 Service not available, remote server has closed connection

Тестирование доступа TLS с помощью FileZilla

Большинство современных FTP-клиентов можно настроить на использование шифрования TLS.

Откройте FileZilla, Файл -> Диспетчер сайтов -> Новый сайт.

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

В поле «Тип входа» выберите «Требовать пароль ». Введите имя пользователя FTP в поле «Пользователь».

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

Нажмите OK, чтобы подключиться. Теперь вы должны быть подключены к вашему серверу с шифрованием TLS/SSL.

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

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

Когда закончите, щелкните правой кнопкой мыши локальную копию, переименуйте ее в upload-tls.txt и перетащите обратно на сервер, чтобы подтвердить, что вы можете загружать файлы:

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

Отключить доступ к оболочке

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

Откройте файл с именем ftponly в каталоге bin:

sudo nano /bin/ftponly

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


#!/bin/sh
 echo "Questo account è limitato solo all'accesso FTP."

Сохраните и закройте файл. Чтобы сохранить файл в текстовом редакторе nano, нажмите Ctrl + O, затем нажмите Enter, чтобы подтвердить имя записываемого файла. Чтобы закрыть файл, нажмите Ctrl + X.)

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

sudo chmod a+x /bin/ftponly

Откройте список допустимых оболочек:

sudo nano /etc/shells

Наконец добавьте:

...
 /bin/ftponly

Сохраните и закройте файл. Чтобы сохранить файл в текстовом редакторе nano, нажмите Ctrl + O, затем нажмите Enter, чтобы подтвердить имя записываемого файла. Чтобы закрыть файл, нажмите Ctrl + X.)

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

sudo usermod grok -s /bin/ftponly

Попробуйте войти на сервер как grok:

ssh grok@indirizzo_ip_del_server

Вы должны получить выходное сообщение, подобное следующему:

...
 This account is limited to FTP access only.
 Connection to 195.201.18.78 closed.

Подтверждает, что пользователь больше не может получить доступ к серверу через ssh и ограничен только доступом по FTP.

Установка и настройка VSFTPD на Ubuntu 18.04 LTS завершена.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.