Как настроить SFTP VSFTPD с SSL / TLS на Ubuntu 18.04 |

Как настроить SFTP VSFTPD с SSL / TLS на Ubuntu 18.04

Мануал

FTP, акроним File Transfer Protocol используется для передачи файлов между компьютером и сервером в данной компьютерной сети.

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

Вместо этого у нас должен быть SFTP (File Transfer Protocol SSH), который использует безопасное соединение SSL между двумя концами.

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

Установка сервера VSFTPD

В Linux есть несколько FTP-серверов.
Мы собираемся установить vsftp. 
Для этого в Ubuntu 18.04 мы вводим следующую команду в терминал:
# sudo apt install vsftpd
После установки vsftpd файл конфигурации по умолчанию находится в файле /etc/vsftpd.conf.
Чтобы внести изменения в этот файл и протестировать пользовательские конфигурации, сначала создадим резервную копию этого файла.
Для этого вы можете запустить:
# sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
Затем мы создаем файл vsftpd.conf со следующей командой:

# sudo vim /etc/vsftpd.conf

и добавьте в файл следующие строки

 listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO 
Обратите внимание, что это наиболее часто используемые конфигурации, и вы можете изменять их в соответствии с вашими потребностями.
Ubuntu 18.04 поставляется с предустановленным и включенным ufw (Uncomplicated firewall).
Вы можете проверить, работает ли ufw на вашем компьютере с помощью этой команды:
 # sudo service ufw status 
Если он запущен, и вы собираетесь его запустить, вы должны разрешить входящий трафик для FTP-портов (20,21 для активных подключений и 10000-10100 для пассивных).
Для этого вы можете запустить:
 # sudo ufw allow from any to any port 20,21,10000:11000 proto tcp 
В случае успеха вывод будет выглядеть следующим образом:
Rules updated

Rules updated (v6)

После выполнения всех этих действий нам необходимо перезапустить сервер vsftpd с помощью следующей команды:

 # sudo service vsftpd restart 

 

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

Когда сервер vsftp установлен и настроен в соответствии с нашими потребностями, нам не нужно создавать пользователя (например, ftpsuer) для подключения к ftp-серверу.

Для этого вы можете запустить:

 #  sudo useradd -m ftpuser 

Создайте пароль для вновь созданного пользователя с помощью следующей команды:

 # sudo passwd ftpuser 

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

Успешный вывод выглядит следующим образом:

 password updated successfully

Подготовить каталог пользователей FTP

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

Для этого в vsftpd нам нужно включить chroot в файле конфигурации, который мы уже делали в части конфигурации статьи (chroot_local_user = YES).

Способ защиты каталога vsftpd предполагает, что пользователь не имеет права на запись в него.

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

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

Также нам нужно изменить права собственности на каталог и удалить доступ на запись.

Для этого вы можете запустить:

 # sudo mkdir /home/ftpuser/ftp

# sudo chown nobody:nogroup /home/ftpuser/ftp

# sudo chmod a-w /home/ftpuser/ftp 

затем добавьте / измените следующие строки в файле конфигурации vsftpd /etc/vsftpd.conf

 user_sub_token = $ USER
local_root = / дом / $ USER / FTP 

После выполнения этих шагов нам нужно создать еще одну папку в /home/ftpuser/ftp и назначить ее владельцу пользователя

 # sudo mkdir /home/ftpuser/ftp/files
# sudo chown ftpuser:ftpuser/home/ftpuser/ftp/files 

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

Для этого вы можете запустить:

 # echo "test file for vsftpd" | sudo tee /home/ftpuser/ftp/files/test.txt 

Настройка SSL для VSFTPD

 

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

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

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

где 365 – для добавления сертификата в течение одного года и добавления того же значения для флажков -out, -keyout, чтобы найти закрытый ключ и сертификат в том же файле.

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

 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]:AU
State or Province Name (full name) [Some-State]:SY
Locality Name (eg, city) []:Sydney
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linoxide
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:ubuntu
Email Address []:test@email.com 

После создания сертификата нам нужно добавить его в файл конфигурации vsftpd и включить SSL.

Для этого добавьте следующую строку в указанный файл:

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

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

Для этого добавьте следующие строки в файл /etc/vsftpd.conf:

 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 

После всех шагов наш файл конфигурации vsftpd будет выглядеть так:

listen=NO
listen_ipv6=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
pasv_enable=Yes
pasv_min_port=10000
pasv_max_port=11000
user_sub_token=$USER
local_root=/home/$USER/ftp
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
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

После любых изменений в файле конфигурации vsftpd нам необходимо перезапустить службу следующей командой:

 # sudo service vsftpd restart 

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

Вы можете добавить переменную пути в конфигурацию vsftpd, где хранится ключ ssl и private.

rsa_cert_file=/ssl/letsencrypt/ftpdomain.com/chain-bundle.pem
rsa_private_key_file=/ssl/letsencrypt/ftpdomain.com/private-key.pem

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

Существует два способа подключения к ftp-серверу:

  • используя терминал
  • использование FTP-клиента с графическим интерфейсом

Подключение через терминал

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

 # ftp ubuntu 

 

 

Где ubuntu – имя хоста машины, на которой установлен ftp-сервер.

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

После подключения вам будет предложено ввести имя пользователя и пароль для подключения к ftp-серверу:

 Connected to ubuntu.
220 (vsFTPd 3.0.3)
Name (ubuntu:ubuntu): ftpuser
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

Введите ls, чтобы проверить, существует ли созданный ранее тестовый файл:

 ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 1001 1001 4096 May 21 13:39 files
226 Directory send OK. 

Подключение с помощью FTP-клиента с графическим интерфейсом

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

Для этого откройте клиент Filezilla на вашем компьютере и введите IP-адрес сервера FTP, учетные данные ftpuser для подключения и нажмите кнопку подключения, как показано на скриншоте ниже.

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

После подключения мы видим, что test.txt, который мы создали ранее, есть.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий для Вячеслав Отменить ответ

  1. NeWT

    Эта статься про FTPS!?

    Ответить
    1. Вячеслав

      “Учителя” не отличают sftp от ftps? ))

      Ответить
  2. Андрей

    Локально всё работает. А как он рядом с апачем стоит на удаленном сервере и что отвечает, вот это вопрос.

    Ответить