Введение
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 завершена.