В это статье мы минимизируем риск получения доступа к серверу, на который мы будем распространять сертификаты.
На целевом ( куда надо скопировать ) сервере создадим пользователя
adduser --shell /usr/sbin/nologin transfer
Немного настроим ssh
В файл /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 права в циферном выражении.
Теперь нам необходимо переложить сертификаты и передёрнуть сервис, для этого мы будем использовать встроенный механизм наблюдения за файлами
Установим пакет:apt install incron
Далее разрешим руту создавать watchdogecho "root" >> /etc/incron.allow
и добавим хук:incrontab -e
добавим туда строку:/srv/transfer/certs/subdomain.example.com/ IN_MODIFY /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:
#!/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
Теперь остаётся только дописать хук в ини сертбота, не забыл дать ему права на исполнение:
[renewalparams]
...
post_hook = /etc/letsencrypt/hooks.d/subdomain.example.com.sh
...
Поздравляю, вы отправили сертификаты на другой сервер сразу после обновления сертботом.
Надеюсь очевидно что авторизация должна происходить с ипользованием ключа.