Как установить FTPS-сервер Pure-FTPd для CentOS 7

FTPs-сервер это...

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

Pure-FTPd - является одним из наиболее популярных FTPS-серверов, он очень прост в установке и настройке, и в тоже время хорошо обеспечивает надежное и безопасное использование (при должной настройке).

В данной статье мы рассмотрим установку и настройку популярного FTPS-сервера Pure-FTPd для VPS/VDS под управлением ОС CentOS 7.

Если вы ищете наиболее простой и безопасный способ передачи файлов между компьютерами, то предлагаю обратить внимание на протоколы SFTP и SCP. C их помощью можно быстро передать файлы и при этом не нужно устанавливать какие либо дополнительные сервисы, т.к. в Linux все изначально предусмотрено для мгновенного начала передачи файлов поверх протокола SSH.

Шаг #1: Установка Pure-FTPd

Установить Pure-FTPd можно следующей командой.

sudo yum install pure-ftpd -y

Запустим установленный, но еще не защищенный,  FTP-сервер.

sudo systemctl start pure-ftpd;
sudo systemctl enable pure-ftpd;

Шаг #2: Создание SSL-сертификата для Pure-FTPd

Для того, чтобы Pure-FTPd работал по защищенному SSL соединению, нам необходимо создать SSL-сертификат. В действительности же мы будет использовать протокол TLS, который является более безопасным приемником протокола SSL.

Для начала создадим директорию для хранения сертификата.

sudo mkdir /etc/ssl/private

Далее создадим файл, который содержит в себе закрытый ключ и самоподписанный SSL-сертификат, со сроком действия 7120 дней.

openssl req -x509 -nodes -days 7120 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

В момент создания сертификата вам предложат ответить на несколько вопросов, главным из которых будет - "Common Name" в ответ на него нужно написать имя домена (например example.ru) или ip-адрес сервера, для которых будет производиться FTPS-подключение.

Шаг #3: Настройка конфигурации

Теперь настроим важные параметры FTPS-сервера. Главным конфигурационным файлом для Pure-FTPd является - /etc/pure-ftpd/pure-ftpd.conf. Перейдем к его редактированию.

sudo vi /etc/pure-ftpd/pure-ftpd.conf

Нам необходимо настроить несколько опций, которые отвечают за работу FTPS-сервера и его безопасность.

Запретим локальным пользователям доступ к системным директориям (каждый пользователь сможет получить доступ только к своей домашней директории - /home/username).

ChrootEveryone yes

Запретим возможность подключения для анонимных пользователей.

NoAnonymous yes

Определим базу данных пользователей.

PureDB /etc/pure-ftpd/pureftpd.pdb

Отключим PAM-аутентификацию.

PAMAuthentication no

Активируем использование SSL-сертификата.

TLS 1

Выберем наиболее расширенный набор алгоритмов для шифрования соединения.

TLSCipherSuite HIGH

Укажем где Pure-FTPd должен искать, созданный нами ранее, сертификат.

CertFile /etc/ssl/private/pure-ftpd.pem

При использовании FTP вместе с SSL, вам понадобится включить пассивный режим, в котором для передачи данных используется больше портов, а не только один 21 порт. В связи с этим вам нужно выбрать группу портов, которую будет использовать Pure-FTPd. Если вы не выделите порты под пассивный режим, то скорее всего FTP-клиент не сможет получить список файлов, к которым пользователь пытается получить доступ.

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

PassivePortRange 45000 50000

Сохраните изменения в файле конфига и перезапустите службу pure-ftpd.

sudo systemctl restart pure-ftpd

Шаг #4: Создание виртуального пользователя

Допустим в системе есть обычный пользователь johndoe, без sudo привилегий, которому необходимо предоставить доступ к директории сайта - /var/www/example.ru.

Для начала создадим группу ftp пользователей - ftpusers.

sudo groupadd ftpusers

Установим группу ftpusers для каталога /var/www/example.ru.

sudo chown -R :ftpusers /var/www/example.ru

Добавим право записи для группы.

chmod -R g+w /var/www/example.ru

Далее добавим пользователя johndoe в группу ftpusers.

sudo gpasswd -a johndoe ftpusers

Делегируем для пользователя johndoe доступ к папке сайта.

chown johndoe:ftpusers /var/www/example.ru –R

На основе его учетной записи создадим виртуального пользователя для директории сайта /var/www/example.ru.

Для создания виртуального пользователя выполните следующую команду, где вместо username укажите имя виртуального пользователя, также укажите имя пользователя системы, его группу и директорию.

pure-pw useradd username -u johndoe -g ftpusers -d /var/www/example.ru –m

Создадим базу данных для виртуального пользователя.

pure-pw mkdb

Перезапустим ftps-сервер.

systemctl restart pure-ftpd

Просмотреть данные о пользователе можно следующим образом.

pure-pw show username

Показать список пользователей.

pure-pw list

Мануал Pure-FTPd.

pure-pw help

Шаг #5: Настройка файрвола (открытие портов)

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

Для начала необходимо убедиться, что файрвол запущен (running).

firewall-cmd --state

Если файрвол не запущен, то исправить это можно так.

sudo systemctl start firewalld;
sudo systemctl enable firewalld;

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

Для открытия 21-порта, достаточно добавить сервис FTP в публичную зону.

sudo firewall-cmd --zone=public --permanent --add-service=ftp

Перезапустим файрвол для применения настроек.

sudo firewall-cmd --reload

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

firewall-cmd --list-services

[root@centos ~]firewall-cmd --list-services
ssh dhcpv6-client http https ftp

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

sudo firewall-cmd --permanent --add-port=45000-50000/tcp;
sudo firewall-cmd reload;

Проверить действительно ли добавились порты можно так.

firewall-cmd --list-ports

[root@centos ~]firewall-cmd --list-ports
45000-50000/tcp

Заключение

Теперь Pure-FTPd полностью готов к безопасной работе с файлами.

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

Для использования FTP совместно с SSL нужно также выбрать параметр "явное шифрование". 

Создание подключения к FTPS-серверу в программе WinSCP
Создание подключения к серверу по FTP c шифрованием в программе WinSCP

 

Создание подключения к серверу по FTP c шифрованием в программе FileZilla
Создание подключения к серверу по FTP c шифрованием в программе FileZilla