Как настроить 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. Андрей

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

    Ответить