Настройка SFTP-сервера на Centos 7
- Подготовьте облако к работе
- Создайте виртуальную машину для SFTP-сервера
- Настройте SFTP-сервер
- Создайте SFTP-пользователя
- Создайте и настройте виртуальную машину для SFTP-клиента
- Создайте резервную копию конфигурационных файлов на SFTP-сервере
- Проверьте работоспособность резервного копирования
- Настройте расписание для резервного копирования
- Восстановите настройки из резервной копии
- Проверьте корректность восстановления
- Как удалить созданные ресурсы
В этом руководстве вы создадите виртуальные машины для SFTP
Чтобы развернуть инфраструктуру:
- Подготовьте облако к работе.
- Создайте виртуальную машину для SFTP-сервера.
- Настройте SFTP-сервер.
- Создайте SFTP-пользователя.
- Создайте и настройте виртуальную машину для SFTP-клиента.
- Сделайте бэкап конфигурационных файлов на SFTP-сервер.
- Проверьте работоспособность бэкапа.
- Настройте расписание для бэкапа.
- Восстановите настройки из бэкапа.
- Проверьте корректность восстановления.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки инфраструктуры входят:
- плата за две постоянно запущенные ВМ (см. тарифы Yandex Compute Cloud):
- виртуальная машина для SFTP-клиента;
- виртуальная машина для SFTP-сервера.
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
Создайте виртуальную машину для SFTP-сервера
Чтобы создать виртуальную машину:
-
В консоли управления
выберите каталог, в котором будет создана ВМ. -
В списке сервисов выберите Compute Cloud.
-
На панели слева выберите
Виртуальные машины. -
Нажмите кнопку Создать виртуальную машину.
-
В блоке Образ загрузочного диска выберите публичный образ CentOS 7.
-
В блоке Расположение выберите зону доступности, в которой будет находиться ВМ.
-
В блоке Вычислительные ресурсы перейдите на вкладку Своя конфигурация и укажите параметры:
- Платформа —
Intel Ice Lake
. - vCPU —
2
. - Гарантированная доля vCPU —
20%
. - RAM —
2 ГБ
.
- Платформа —
-
В блоке Сетевые настройки:
-
В поле Подсеть укажите идентификатор подсети в зоне доступности создаваемой ВМ или выберите облачную сеть из списка.
-
У каждой сети должна быть как минимум одна подсеть. Если подсети нет, создайте ее, выбрав Создать подсеть.
-
Если сети нет, нажмите Создать сеть и создайте ее:
- В открывшемся окне укажите имя сети и выберите каталог, в котором она будет создана.
- (Опционально) Выберите опцию Создать подсети, чтобы автоматически создать подсети во всех зонах доступности.
- Нажмите Создать сеть.
-
-
В поле Публичный адрес выберите
Автоматически
, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex Cloud. Чтобы внешний IP-адрес не изменялся после остановки виртуальной машины, сделайте его статическим.
-
-
В блоке Доступ выберите SSH-ключ и укажите данные для доступа к ВМ:
- В поле Логин введите имя пользователя, который будет создан на виртуальной машине, например
yc-user
. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- Нажмите кнопку Добавить ключ.
- Задайте имя SSH-ключа.
- Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
- Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации.
Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.
Внимание
IP-адрес и имя хоста (FQDN) для подключения к машине будут назначены ей при создании. Если вы выбрали вариант Без адреса в поле Публичный адрес, вы не сможете обращаться к виртуальной машине из интернета.
- В поле Логин введите имя пользователя, который будет создан на виртуальной машине, например
-
В блоке Общая информация задайте имя ВМ:
sftp-server
. -
Нажмите Создать ВМ.
Создание виртуальной машины может занять несколько минут.
Настройте SFTP-сервер
Функционал SFTP-сервера включен в стандартную программу SSH, которая поставляется с дистрибутивом Centos 7. Для настройки SFTP-сервера отредактируйте конфигурационный файл /etc/ssh/sshd_config
:
-
Зайдите по SSH на виртуальную машину SFTP-сервера.
-
Откройте конфигурационный файл в редакторе vi. Этот редактор поставляется с дистрибутивом и не требует установки. Если вы не знакомы с этим редактором, то подробности можете узнать в официальной документации
.sudo vi /etc/ssh/sshd_config
-
Добавьте следующие строчки в конец файла:
Match User fuser ForceCommand internal-sftp PasswordAuthentication no ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
Где:
Match User fuser
— указывает на то, что все последующие строчки будут применены только при подключении пользователяfuser
.ForceCommand internal-sftp
— подключает пользователя только в режиме SFTP и не разрешает доступ в shell.PasswordAuthentication no
— отключает доступ по логину и паролю.ChrootDirectory /var/sftp
— ограничивает доступ пользователя только папкой/var/sftp
.PermitTunnel no
,AllowAgentForwarding no
,AllowTcpForwarding no
,X11Forwarding no
— отключает туннелирование, проброс портов и графических приложений через SSH-сессию.
-
Сохраните файл.
-
Выведите конфигурационный файл без закомментированных и пустых строк:
sudo cat /etc/ssh/sshd_config | grep -v -e '^#' -e '^$'
-
Убедитесь, что вывод предыдущей команды совпадает с данными строками:
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server Match User fuser ForceCommand internal-sftp PasswordAuthentication no ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
-
Перезагрузите SFTP-сервер, чтобы настройки вступили в силу:
sudo systemctl restart sshd
После перезагрузки заново зайдите по SSH на виртуальную машину SFTP-сервера.
-
Создайте группу для SFTP-пользователей:
sudo groupadd ftpusers
-
Создайте папки для сохранения файлов:
sudo mkdir -p /var/sftp/backups
sftp
— корневая папка SFTP-сервера.backups
— папка для хранения резервных копий на SFTP-сервере.
-
Установите разрешения на папки таким образом, чтобы все пользователи, входящие в состав группы
ftpusers
, могли записывать и читать файлы на SFTP-сервере:sudo chown root:ftpusers /var/sftp/backups sudo chmod 770 /var/sftp/backups
-
Проверьте корректность установленных разрешений:
ls -la /var | grep sftp ls -la /var/sftp
Результат:
drwxr-xr-x. 4 root root 37 Aug 7 11:35 sftp drwxrwx---. 2 root ftpusers 80 Aug 7 08:41 backups
Создайте SFTP-пользователя
На виртуальной машине SFTP-сервера:
-
Создайте SFTP-пользователя, например
fuser
:sudo useradd fuser
-
Создайте пароль для SFTP-пользователя:
sudo passwd fuser
-
Создайте SSH-ключи для пользователя
fuser
. Командаssh-keygen
выполняется от имени пользователяfuser
:sudo runuser -l fuser -c 'ssh-keygen'
Процесс генерации ключа приведен ниже. Поле
passphrase
оставьте пустым.Generating public/private rsa key pair. Enter file in which to save the key (/home/fuser/.ssh/id_rsa): Created directory '/home/fuser/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/fuser/.ssh/id_ed25519. Your public key has been saved in /home/fuser/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:sXiE7EfPl8mo9mZCG+ta7fBxwdwdhbjNux63P8EIYNs fuser@ftp-server.ru-central1.internal The key's randomart image is: +--[ED25519 256]--+ | . ..| | . . o . . .| | o = + + . | | . + * E.+o..| | o S + X +..| | ooo . o.o | | .=+o . ..o| | o+=oo .+.| | .o.++ ...+| +----[SHA256]-----+
-
Создайте файл для сохранения публичных SSH-ключей SFTP-клиента. Установите нужные разрешения:
sudo touch /home/fuser/.ssh/authorized_keys sudo chmod 600 /home/fuser/.ssh/authorized_keys sudo chown fuser:fuser /home/fuser/.ssh/authorized_keys
-
Убедитесь, что разрешения установлены верно:
ls -la /home/fuser/.ssh/
Результат:
-rw-------. 1 fuser fuser 421 Aug 7 08:31 authorized_keys -rw-------. 1 fuser fuser 419 Aug 7 08:29 id_ed25519 -rw-r--r--. 1 fuser fuser 107 Aug 7 08:29 id_ed25519.pub
-
Добавьте SFTP-пользователя в SFTP-группу:
sudo usermod -G ftpusers fuser
Создайте и настройте виртуальную машину для SFTP-клиента
Процесс создания виртуальной машины для SFTP-клиента полностью совпадает с созданием виртуальной машины для SFTP-сервера.
-
Выполните пункты 1-11 из раздела о создании виртуальной машины для SFTP-сервера (в качестве имени машины укажите
sftp-client
). -
Зайдите по SSH на виртуальную машину SFTP-клиента.
-
Создайте пару SSH-ключей на SFTP-клиенте. Процесс аналогичен описанному для пользователя
fuser
в предыдущем разделе:ssh-keygen
-
Выведите публичный ключ на экране SFTP-клиента:
cat ~/.ssh/id_rsa.pub
-
Зайдите по SSH на виртуальную машину SFTP-сервера.
-
Откройте файл
/home/fuser/.ssh/authorized_keys
:sudo vi /home/fuser/.ssh/authorized_keys
-
Скопируйте SSH-ключ, полученный на SFTP-клиенте, в конец файла.
-
Сохраните файл.
-
Убедитесь, что виртуальная машина SFTP-клиента доступна с SFTP-сервера, и наоборот:
-
Зайдите по SSH на виртуальную машину SFTP-сервера.
-
Найдите публичный или внутренний IP-адрес SFTP-клиента в консоли Yandex Cloud в разделе настроек виртуальной машины.
Важно
Внутренние адреса SFTP-клиента и SFTP-сервера должны находиться в одной подсети или быть связаны через настройки маршрутизации.
-
Введите команду в терминале SFTP-сервера, подставив соответствующее значение:
ping -с 3 <IP_адрес_SFTP_клиента>
-
Убедитесь, что пакеты отправляются и получаются успешно:
ping -с 3 84.201.170.171
Результат:
PING 84.201.170.171 (84.201.170.171) 56(84) bytes of data. 64 bytes from 84.201.170.171: icmp_seq=1 ttl=55 time=8.59 ms 64 bytes from 84.201.170.171: icmp_seq=2 ttl=55 time=6.32 ms 64 bytes from 84.201.170.171: icmp_seq=3 ttl=55 time=5.95 ms --- 84.201.170.171 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 5.955/6.959/8.595/1.168 ms
-
Повторите проверку на SFTP-клиенте, подставив в команду IP-адрес SFTP-сервера.
-
Создайте резервную копию конфигурационных файлов на SFTP-сервере
В инструкции рассмотрено резервное копирование конфигурационных файлов (с расширением .conf
) из папки /etc
.
Процесс резервного копирования:
- Упакуйте все нужные конфигурационные файлы в архив.
- Передайте архив на SFTP-сервер.
- Удалите архив на SFTP-клиенте.
Чтобы настроить процесс резервного копирования:
-
Зайдите по SSH на виртуальную машину SFTP-клиента.
-
Задайте переменные окружения для корректной работы скрипта. Для этого откройте файл
~/.bash_profile
:vi ~/.bash_profile
-
Добавьте следующие строчки в конец файла, подставив нужные значения:
export SFTP_SERVER=<IP_адрес_SFTP_сервера> export SFTP_USER='fuser'
-
Примените настройки:
source ~/.bash_profile
-
Убедитесь, что эти переменные появились:
env | grep SFTP
Результат:
SFTP_USER=fuser SFTP_SERVER=10.128.0.5
-
Запакуйте все конфигурационные файлы в один архив:
sudo find /etc -type f -name *.conf -print0 | sudo tar -czf backup.tar.gz --null -T -
Где:
sudo find /etc -type f -name *.conf -print0
— поиск всех файлов.conf
из папки/etc
.sudo tar -czf backup.tar.gz --null -T -
— перемещение конфигурационных файлов в архивbackup.tar.gz
.
-
Перешлите полученный архив на SFTP-сервер:
curl \ --upload-file backup.tar.gz sftp://$SFTP_SERVER/backups/backup_$(hostname)_$(date "+%Y%m%d_%H%M%S").tar.gz \ --insecure \ --user $SFTP_USER:
Где:
-
-T
— загружает файлbackup.tar.gz
на удаленный сервер. -
$SFTP_SERVER
— переменная, которая автоматически принимает значение IP-адреса SFTP-сервера. -
backup_$(hostname)_$(date "+%Y%m%d_%H%M%S").tar.gz
— добавляет к названию архива название компьютера, а также дату и время, когда был создан архив. Это позволит не потеряться в навигации по списку резервных копий на сервере.Например, имя архива на сервере может выглядеть так:
backup_ftp-server.ru-central1.internal_20190803_180228.tar.gz
. -
--insecure
— отключает проверку SSL сертификатов со стороны SFTP-сервера. При этом трафик в рамках SSH-сессии все равно шифруется. -
$SFTP_USER
— переменная, которая автоматически принимает значение SFTP-пользователя. -
:
— пустой пароль. Пароль не будет запрошен.
-
-
Удалите архив на SFTP-клиенте:
sudo rm -f backup.tar.gz
Все действия для создания резервной копии можно выполнить одной командой в терминале SFTP-клиента:
sudo find /etc -type f -name *.conf -print0 | sudo tar -czf backup.tar.gz --null -T -&& curl --upload-file backup.tar.gz sftp://$SFTP_SERVER/backups/backup_$(hostname)_$(date "+%Y%m%d_%H%M%S").tar.gz --insecure --user $SFTP_USER: && sudo rm -f backup.tar.gz
Проверьте работоспособность резервного копирования
Чтобы убедиться в том, что резервная копия создается нужным образом, запустите копирование и найдите копию на сервере:
-
Зайдите по SSH на виртуальную машину SFTP-клиента и запустите команду для резервного копирования:
sudo find /etc -type f -name *.conf -print0 | sudo tar -czf backup.tar.gz --null -T -&& curl --upload-file backup.tar.gz sftp://$SFTP_SERVER/backups/backup_$(hostname)_$(date "+%Y%m%d_%H%M%S").tar.gz --insecure --user $SFTP_USER: && sudo rm -f backup.tar.gz
-
Зайдите по SSH на виртуальную машину SFTP-сервера и убедитесь, что файл вида
backup_ftp-server.ru-central1.internal_20190803_180228.tar.gz
появился в домашнем каталоге SFTP-пользователя. Для этого на SFTP-сервере запустите команду:sudo ls /var/sftp/backups
Настройте расписание для резервного копирования
Для создания регулярных резервных копий ваших настроек можно использовать встроенную программу crontab
.
-
Зайдите по SSH на виртуальную машину SFTP-клиента и откройте файл
crontab
для редактирования:crontab -e
-
Добавьте следующие строки, чтобы запускать резервное копирование каждый день в 11 часов вечера по UTC:
SFTP_SERVER=<IP_адрес_SFTP_сервера> SFTP_USER='fuser' 0 23 * * * sudo find /etc -type f -name *.conf -print0 | sudo tar -czf backup.tar.gz --null -T -&& curl --upload-file backup.tar.gz sftp://$SFTP_SERVER/backups/backup_$(hostname)_$(date "+\%Y\%m\%d_\%H\%M\%S").tar.gz --insecure --user $SFTP_USER: && sudo rm -f backup.tar.gz
- На виртуальной машине по умолчанию время UTC. Учитывайте разницу с вашим локальным временем при настройке расписания.
- В команде, вносимой в crontab, необходимо экранировать все
%
при помощи\
.
Восстановите настройки из резервной копии
Процесс восстановления настроек:
- Скачайте резервную копию с SFTP-сервера на SFTP-клиент.
- Распакуйте архив.
- Скопируйте конфигурационные файлы из архива в систему.
- Удалите архив.
Чтобы восстановить настройки из резервной копии:
-
На SFTP-сервере в папке
/var/sftp/backups
выберите резервную копию, из которой следует восстановить конфигурационные файлы. Например, это будетbackup_ftp-server.ru-central1.internal_20190803_180228.tar.gz
. -
Зайдите по SSH на виртуальную машину SFTP-клиента.
-
Задайте переменную окружения для названия файла резервной копии:
SFTP_BACKUP='backup_ftp-server.ru-central1.internal_20190803_180228.tar.gz'
-
Скачайте эту резервную копию с SFTP-сервера:
sftp $SFTP_USER@$SFTP_SERVER:/backups/$SFTP_BACKUP .
-
Распакуйте архив:
tar -xzf $SFTP_BACKUP
-
Скопируйте конфигурационные файлы из архива в систему. Используйте
yes
в команде, чтобы не вводить подтверждение при перезаписи файлов:yes | sudo cp -rfp etc /
-
Удалите архив и распакованное содержимое:
rm -f $SFTP_BACKUP rm -rfd etc
Все действия для восстановления из резервной копии можно выполнить одной командой в терминале SFTP-клиента:
sftp $SFTP_USER@$SFTP_SERVER:/backups/$SFTP_BACKUP . && tar -xzf $SFTP_BACKUP && yes | sudo cp -rfp etc / && rm -rfd etc && rm -f $SFTP_BACKUP
Проверьте корректность восстановления
На виртуальной машине SFTP-клиента:
-
Чтобы проверить, что конфигурационные файлы из архива успешно попадают в файловую систему, добавьте проверочный блок в команду, полученную выше:
sftp $SFTP_USER@$SFTP_SERVER:/backups/$SFTP_BACKUP . && tar -xzf $SFTP_BACKUP && echo "## this is from backup" >> etc/yum.conf && yes | sudo cp -rfp etc / && rm -rfd etc && rm -f $SFTP_BACKUP
Команда
echo "## this is from backup" >> etc/yum.conf
записывает тестовую фразу "## this is from backup" в конец файлаetc/yum.conf
, распакованного из архива. -
После восстановления из резервной копии выполните следующую команду:
cat /etc/yum.conf | grep backup
-
Убедитесь, что на экране отображается тестовая фраза:
## this is from backup
Как удалить созданные ресурсы
Если вам больше не нужны SFTP-сервер и SFTP-клиент:
- Удалите виртуальные машины для SFTP-клиента и SFTP-сервера (в примере они названы
sftp-server
иsftp-client
). - Удалите статический IP-адрес, если он был вами зарезервирован.