FTP, акроним File Transfer Protocol используется для передачи файлов между компьютером и сервером в данной компьютерной сети.
Протокол FTP использует небезопасный способ передачи данных и должен быть ограничен сетью, в которой вы доверяете.
Вместо этого у нас должен быть SFTP (File Transfer Protocol SSH), который использует безопасное соединение SSL между двумя концами.
В этой статье приводятся подробные инструкции по настройке защищенного сервера vsftpd с SSL / TLS на Ubuntu 18.04 и подключение к серверу с помощью терминала и инструментов графического интерфейса.
Установка сервера VSFTPD
# 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
# sudo service ufw status
# 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, который мы создали ранее, есть.
Эта статься про FTPS!?
“Учителя” не отличают sftp от ftps? ))
Локально всё работает. А как он рядом с апачем стоит на удаленном сервере и что отвечает, вот это вопрос.