Авторизоваться
Виталик Коростелёв 15.01.2024 Опубликована

Безопасный способ передачи файлов с сервера на сервер.

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

На целевом ( куда надо скопировать ) сервере создадим пользователя

adduser --shell /usr/sbin/nologin transfer

Немного настроим ssh
В файл /etc/ssh/sshd_config.d/transfer.conf

добавим строчки:

/etc/ssh/sshd_config.d/transfer.conf
Match User transfer
    LogLevel DEBUG2
    ChrootDirectory /srv/transfer
    ForceCommand internal-sftp

Это запретит пользователю делать что-либо помимо использования sftp и запрёт его в директории /srv/transfer

Важно: каталог /srv/transfer должен принадлежать root, а вложенный каталог в который мы будем что-либо копировать уже пользователю ( в моём случае transfer

ls -la /srv/
 drwxr-xr-x 3 root root 4096 Jan 15 08:41 transfer
 ls -la /srv/transfer/
 drwxr-xr-x 3 transfer transfer 4096 Jan 15 08:45 certs

это 0755 права в циферном выражении.

Теперь нам необходимо переложить сертификаты и передёрнуть сервис, для этого мы будем использовать встроенный механизм наблюдения за файлами

Inotify

Установим пакет:
apt install incron

Далее разрешим руту создавать watchdog
echo "root" >> /etc/incron.allow

и добавим хук:
incrontab -e
добавим туда строку:
/srv/transfer/certs/subdomain.example.com/ IN_MODIFY /path/to/hook.sh
Подробнее в документации.

Теперь сделаем простейший хук:

/path/to/hook.sh
#!/bin/bash

cp -r /srv/transfer/certs/subdomain.example.com/ /etc/nginx/ssl/

service nginx reload

echo "certs pages.polymatica.ru updated at $(date)" > /tmp/subdomain.example.com.update

exit 0

Не забудьте добавить права на исполнение.
chmod +x /path/to/hook.sh

На этом с настройкой целевого сервера всё.

Теперь настроим сервер с которого будут распространяться сертификаты:
Создадим хук для certbot:

/etc/letsencrypt/hooks.d/subdomain.example.com.sh
#!/bin/bash


cp -rL /etc/letsencrypt/live/subdomain.example.com/ /srv/transfer/
sftp transfer@subdomain.example.com <<< $'put -r /srv/transfer/subdomain.example.com/ /certs/'

exit 0

Теперь остаётся только дописать хук в ини сертбота, не забыл дать ему права на исполнение:

/etc/letsencrypt/renewal/subdomain.example.com.conf
[renewalparams]
...
post_hook = /etc/letsencrypt/hooks.d/subdomain.example.com.sh
...

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

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

Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie