3. Настройка и запуск Агента СМЭВ4
3.1. Порядок загрузки данных и программ
Администратор УВ осуществляет развёртывание, запуск и настройку Агента СМЭВ4 с помощью данного руководства.
3.2. Подготовка и настройка системы для запуска Агента СМЭВ4 без использования Docker
3.2.1. Состав и содержание дистрибутивного пакета
Состав дистрибутива Агента СМЭВ4 в архиве с бинарными файлами (/distr/einfahrt):
/distr/einfahrt/app/app.jar– исполняемый файл;
Для установки Агента необходим CryptoPro CSP 5.0 R3, предназначенный для установки в используемую ОС. Его необходимо загрузить с сайта производителя https://cryptopro.ru/products/csp/downloads#latest_csp50r3_linux
Путь /distr/einfahrt указан в качестве примера. Допустимо использовать любой другой путь,
скорректировав соответствующим образом упоминаемые ниже команды.
Необходимо приобрести и загрузить с сайта https://axiomjdk.ru/pages/downloads/#/java-17-lts Axiom JDK 17-й версии, соответствующую используемой ОС
3.2.2. Предварительные операции (установка «пре-реквизитов»)
Перед запуском Агента СМЭВ4 выполнить от имени пользователя root либо используя команду sudo следующие действия:
Создать пользователя {{user}} и группу {{user_group}}, под которым будет работать Агент СМЭВ4. Создать каталог /distr/einfahrt, владельцем каталога назначить пользователя {{user}}. Создать каталог /distr/einfahrt/app, скопировать в него исполняемый файл Агента app.jar из дистрибутивного пакета.
Примечание
Для того, чтобы пользователь мог перезапускать Агента и смотреть системный лог нужно указать: {{ user }} ALL=NOPASSWD:/bin/journalctl,/bin/systemctl. Если убрать «NOPASSWD:», то пароль будет запрашиваться каждый раз.
Установить JDK (версия в примере ниже может отличаться для загруженного пакета)
Для ALT 8 SP Server 10
apt install axiomjdk-jdk-certified17.0.6+11-linux-amd64.**alt8**.rpm
Для RedOS 7.3
yum install axiomjdk-jdk-certified17.0.6+11-linux-amd64.rpm
Для Astra Linux 1.7 SE
apt-get install axiomjdk-jdk-certified17.0.6+11-linux-amd64.deb
Установить системные переменные
export JAVA_HOME=/usr/lib/jdk/axiomjdk-java17.x86_64
export PATH=$PATH:$JAVA_HOME/bin
Переменные должны устанавливаться автоматически также после перезагрузки сервера.
Для этого рекомендуется внести данную настройку в profile ОС (/etc/profile.d).
Установить CryptoPro CSP, используя загруженный с сайта производителя пакет
Внимание
Не требуется устанавливать отдельный экземпляр CryptoPro CSP для Агента или опционального компонента Prohibitor, если используется сервис подписания и верификации сообщений, установленный на отдельном сервере (см. Раздел 4.3.12.1 и Раздел 8.2.6.3) В этом случае CryptoPro CSP требуется установить на сервер, на котором разворачивается сервис подписания и верификации сообщений (см. Раздел 10)
При установке на RedOS 7.3:
tar -xzvf linux-amd64.tgz
cd linux-amd64
yum -y install lsb-cprocsp-base*.rpm lsb-cprocsp-rdr-64*.rpm lsb-cprocsp-kc1-64*.rpm lsb-cprocsp-capilite-64*.rpm lsb-cprocsp-devel*.rpm lsb-cprocsp-kc2-64*.rpm cprocsp-curl-64*.rpm
./install.sh
cd ..
При установке на Astra Linux 1.7 SE:
cd /distr/einfahrt
tar -xzvf linux-amd64_deb.tgz
cd linux-amd64_deb
apt -y install lsb-cprocsp-base*.deb lsb-cprocsp-rdr-64*.deb lsb-cprocsp-kc1-64*.deb lsb-cprocsp-capilite-64*.deb lsb-cprocsp-devel*.deb lsb-cprocsp-kc2-64*.deb cprocsp-curl-64*.deb
./install.sh
cd ..
При установке на ALT 8 SP Server 10:
tar -xzvf linux-amd64.tgz
cd linux-amd64
apt-get -y install lsb-cprocsp-base*.rpm lsb-cprocsp-rdr-64*.rpm lsb-cprocsp-kc1-64*.rpm lsb-cprocsp-capilite-64*.rpm lsb-cprocsp-devel*.rpm lsb-cprocsp-kc2-64*.rpm cprocsp-curl-64*.rpm
./install.sh
cd ..
При наличии лицензионного кода CryptoPro CSP выполнить команду:
sudo /opt/cprocsp/sbin/amd64/cpconfig -license -set {{cprocsp_license_code}}
В случае отсутствия лицензионного кода, CryptoPro CSP будет работать в режиме trial лицензии.
Внимание
Срок действия trial лицензии – 90 дней с момента установки CryptoPro CSP. Для сохранения работоспособности Агента СМЭВ4 по окончании данного периода, необходимо приобрести лицензию на CryptoPro CSP и внести её в систему как указано выше.
Установить контейнер ключа CryptoPro в директорию
/var/opt/cprocsp/keys/{{user}}/. Пользователь {{user}} должен быть владельцем данной директории и файлов в ней.
Примечание
Установка ключа CryptoPro требуется только на серверы, на которых устанавливается CryptoPro. Т.е. в случае использования сервиса подписания и верификации сообщений, (см. Раздел 4.3.12.1 и Раздел 8.2.6.3), установка ключей производится только на сервере сервиса подписания и верификации сообщений (notarius)
В файл
/etc/hostsдобавить записи, соответствующие адресам серверов аутентификации:
172.20.59.5 podd.gosuslugi.ru
172.20.59.5 podd-cross.gosuslugi.ru
109.207.15.26 podd1.gosuslugi.ru
109.207.15.58 podd2.gosuslugi.ru
109.207.15.154 podd3.gosuslugi.ru
109.207.15.186 podd4.gosuslugi.ru
109.207.15.26 podd1-cross.gosuslugi.ru
109.207.15.58 podd2-cross.gosuslugi.ru
109.207.15.154 podd3-cross.gosuslugi.ru
109.207.15.186 podd4-cross.gosuslugi.ru
Или выполнить команды:
echo -e “\n\n# Адреса сервиса аутентификации Агента СМЭВ4”
echo -e “\n\n172.20.59.5 podd.gosuslugi.ru” >> /etc/hosts
echo -e “172.20.59.5 podd-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.26 podd1.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.58 podd2.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.154 podd3.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.186 podd4.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.26 podd1-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.58 podd2-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.154 podd3-cross.gosuslugi.ru” >> /etc/hosts
echo -e “109.207.15.186 podd4-cross.gosuslugi.ru” >> /etc/hosts
Выложить в каталог
/distr/enfahrtконфигурационный файлapplication.yml, подготовленный согласно описанию в Раздел 4. Установить пользователя {{user}} владельцем данного файла.
3.2.3. Запуск Агента СМЭВ4
Убедитесь, что пользователь {{user}} имеет доступ к директории, в которой установлен Агент СМЭВ4 (/distr/einfahrt).
Пример раздела конфигурации скрипта для запуска Агента СМЭВ4 с использованием сервиса systemd
Данный файл, с названием einfahrt.service, необходимо сохранить в каталог /etc/systemd/system/, указав, при необходимости,
корректные пути к файлам:
[Unit]
Description="Service for einfahrt"
After=syslog.target
[Service]
Type=simple
WorkingDirectory=/distr/einfahrt
LimitNOFILE=1048576:1048576
# Важно! Запуск должен производиться от имени того пользователя, для которого ранее были выложены ключи CryptoPro!
User={{user}} # указать пользователя
Group={{user_group}} # указать группу
Environment="JAVA_HOME=/usr/lib/jdk/axiomjdk-java17.x86_64"
Environment="JDK_JAVA_OPTIONS=--add-exports=java.base/sun.security.util=ALL-UNNAMED \
--add-exports=java.base/sun.security.x509=ALL-UNNAMED \
--add-exports=java.base/sun.security.pkcs=ALL-UNNAMED \
--add-exports=java.base/sun.security.provider=ALL-UNNAMED \
--add-exports=java.base/sun.security.tools.keytool=ALL-UNNAMED \
--add-exports=java.base/sun.net=ALL-UNNAMED \
--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED \
--add-opens=java.xml/org.w3c.dom=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
-Dio.netty.tryReflectionSetAccessible=true \
-Dsaffron.default.charset=UTF-16LE \
-Dsaffron.default.collation.name='UTF-16LE$en_US' \
-Dsaffron.default.nationalcharset=UTF-16LE \
-XX:MaxRAMPercentage=80.0"
ExecStart=/usr/lib/jdk/axiomjdk-java17.x86_64/bin/java -jar app/app.jar
[Install]
WantedBy=multi-user.target
Далее от имени пользователя root или используя sudo выполнить команду по включению, запуску сервиса и проверке его статуса:
sudo systemctl daemon-reload
sudo systemctl enable einfahrt
sudo systemctl start einfahrt
sudo systemctl -l status einfahrt
3.2.4. Проверка работоспособности Агента СМЭВ4 после включения и запуска сервиса
Для проверки соединения Агента с Ядром СМЭВ4 необходимо выполнить команду с использованием утилиты curl.
Если утилита Curl не установлена необходимо ее установить из базового репозитория для Astra Linux 1.7 SE командой:
sudo apt-get install curl
для RedOS 7.3
sudo dnf install curl
Проверка корректной установки Агента СМЭВ4 осуществляется командой:
curl -X POST 'http://agent-ip-address:8192/query?async=false' -H "Accept-Version: 1" -H "Content-Type: application/json" -d '{"sql": {"sql": "select 1"}}'
Вывод должен быть следующим:
{
"created_at": "YYYY-MM-DD HH-MM-SS",
"query_id": "<identifier>",
"meta": [
{
"name": "EXPR$0",
"type": "INTEGER"
}
],
"rows": [
[
"1"
]
]
}
3.2.5. Настройка ротации логов (опционально)
Во избежание переполнения диска лог-файлами, рекомендуется настроить ротацию лог-файлов systemd сервиса.
Настройка логирования осуществляется с помощью файлов конфигурации logrotate и systemd сервиса. Если этих файлов не существует, их необходимо создать.
Первоначально необходимо установить пакет logrotate, для rpm-base дистрибутивов необходимо выполнить команду:
sudo yum install logrotate
Добавьте в файл systemd сервиса (/etc/systemd/system/einfahrt.service) следующие настройки логирования:
...
[Service]
Type=simple
StandardOutput=append:/var/log/{{ file_name }}
StandardError=append:/var/log/{{ file_name }}
...
Создайте файл конфигурации logrorate (поместить файл в /etc/logrotate.cron/einfahrt.conf) и поместите в него
следующие строки:
/var/log/{{ file_name }} {
rotate {{ rotate }}
size {{ file_size }}
create
nocompress
copytruncate
}
где:
rotate– какое количество лог файлов оставлять,file_size– размер лог-файла при котором будет происходить ротация.
Создайте файл со скриптом запуска утилиты logrotate, поместите скрипт по пути /etc/logrotate.cron/einfahrt.sh
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.cron/einfahrt.conf
Добавьте права на запуск командой:
chmod +x /etc/logrotate.cron/einfahrt.sh
Создайте правила cron, создайте файл /etc/cron.d/einfahrt и поместите в него приведенную ниже строку:
*/1 * * * * root /etc/logrotate.cron/einfahrt_logrotate.sh
Далее перезагрузите systemd сервис:
sudo systemctl daemon-reload
sudo systemctl restart einfahrt
3.3. Настройка и запуск Агента СМЭВ4 с использованием Docker
3.3.1. Предварительные условия
На сервере должен быть установлен Docker версии не ниже 20.10.12.
Создан пользователь, который будет запускать Агент СМЭВ4.
Этот пользователь должен иметь права на загрузку докер-образов и запуск/остановку контейнеров (т.е. добавлен в группу Docker).
3.3.2. Настройка ротации лог-файлов в Docker (опционально)
Во избежание переполнения диска лог-файлами, рекомендуется настроить ротацию лог-файлов контейнеров в Docker.
Настройка логирования в Docker осуществляется с помощью файла конфигурации /etc/docker/daemon.json.
Если этого файла не существует, его необходимо создать. Добавьте в файл следующие настройки логирования:
для Astra Linux 1.7 SE:
{
"log-opts": {
"max-file": "3",
"max-size": "100m"
}
}
для RedOS 7.3:
{
"log-driver": "json-file",
"live-restore": true,
"icc": false,
"disable-validation": true,
"log-opts": {
"max-file": "3",
"max-size": "100m"
}
}
где:
max-file– ограничение по количеству файлов (настройки ротации). Максимальное количество файлов журнала, которые могут быть созданы. При превышении количества самый старый файл удаляется. Действует только при установленном параметреmax-size. Положительное целое число. По умолчанию 1;max-size– устанавливает ограничение по размеру лог-файла (k, m или g). По умолчанию -1 (не ограничено).
3.3.3. Состав и содержание дистрибутивного пакета
Для запуска Агента под Docker необходимо самостоятельно собрать Docker образы, согласно описания в Раздел 10
3.3.4. Подготовка к запуску
Для запуска Агента СМЭВ4 необходимо после распаковки пакета сформировать конфигурационный файл application.yml,
как указано в Раздел 4.3 , и сохранить его в каталог /distr/einfahrt.
В каталоге /distr/einfahrt:
создать подкаталог
keys, сохранить в него полученный ключ CryptoPro в распакованном виде ;
Примечание
создание подкаталога keys и сохранение в него ключа не требуется в случае использования сервиса подписания и верификации сообщений, (см. Раздел 4.3.12.1: и Раздел 8.2.6.3:), в таком случае установка ключей производится только на сервере сервиса подписания и верификации сообщений (notarius)
(только при использовании HTTPS API gateway) создать подкаталог
certs, подготовить файл cacerts согласно Раздел 4.3.9, сформированный файл сохранить в каталог/distr/einfahrt/certs.
При наличии файла расширенных настроек логирования customLogLevels.xml сохранить его в каталог /distr/einfahrt.
Для запуска Агента СМЭВ4 под Docker, полученный Docker образ необходимо загрузить в локально установленный Docker на машине, где будет работать Агент СМЭВ4.
Для этого необходимо сохранить архив с образом на локальный диск этой машины и выполнить команду:
docker load < einfahrt.tgz
где einfahrt.tgz – имя полученного архива с Docker образом Агента СМЭВ4.
Загрузка должна завершиться без ошибок.
Проверить успешность загрузки можно командой:
docker images | grep einfahrt
Вывод будет содержать информацию следующего вида:
einfahrt latest c7511824117e 5 days ago 1.2G
3.3.5. Запуск Агента СМЭВ4
Для запуска Агента СМЭВ4 используется скрипт run_agent.sh
#!/bin/bash
# Название docker image указать здесь
IMAGE=einfahrt:latest
# Список используемых портов приложения, указывается в круглых скобках
PORT_LIST=(8183 8192 8171 8172)
###### DO NOT EDIT BELOW THIS LINE ###### НЕ РЕДАКТИРОВАТЬ НИЖЕ ######
stop()
{
echo $1
exit 1
}
#
IMG=$(echo ${IMAGE} |cut -d: -f1)
TAG=$(echo ${IMAGE} |cut -d: -f2)
[ ! -f application.yml ] && stop "File application.yml not found; exiting" || chmod 0666 application.yml
DIR=$(pwd)
[ ! -d keys ] && stop "\"keys\" directory not found; exiting"
MOUNTS=" --mount type=bind,source=${DIR}/application.yml,target=/egov/java/application.yml,readonly"
[ -d keys ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/keys,target=/var/opt/cprocsp/keys/app"
[ -d certs ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/certs,target=/egov/java/certs,readonly"
# check exisence of mandatory objects; set permissions
for OBJECT in certs keys; do
[ -d ${OBJECT} ] && find ${OBJECT} \( -type f -exec chmod 0666 {} + \) -o \( -type d -exec chmod 0777 {} + \)
done
# Если есть лицензия КриптоПро CSP, она должна находиться в текстовом виде в файле licenses/csp.lic
# При отсутствии внешнего файла с лицензией, будет использовано trial лицензирование CryptoPro
[ -f licenses/csp.txt ] && MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/licenses/csp.txt,target=/egov/csp.lic,readonly"
# custom logger configuration, if exists
if [ -f customLogLevels.xml ]; then
chmod 0666 customLogLevels.xml
MOUNTS="${MOUNTS} --mount type=bind,source=${DIR}/customLogLevels.xml,target=/chgCfgTmp/customLogLevels.xml"
fi
# expose ports
unset PORTS
for OBJECT in ${PORT_LIST[@]}; do
PORTS="${PORTS} -p ${OBJECT}:${OBJECT}"
done
echo "Checking for already started container, stop it if running"
[ ! -z $(docker ps |awk '{print $NF}'|grep "^${IMG}$") ] && docker stop ${IMG} >/dev/null
[ ! -z $(docker ps -a |awk '{print $NF}'|grep "^${IMG}$") ] && docker rm ${IMG} >/dev/null
echo "Starting docker container"
# Важно! Для корректного использования ключей CryptoPro,
# процесс в контейнере docker должен выполняться пользователем app (id=1000)
# использование ключа «--user=1000» обязательно!
docker run \
-d \
--user=1000 \
--name ${IMG} \
--add-host podd.gosuslugi.ru:172.20.59.5 \
--add-host podd1.gosuslugi.ru:109.207.15.26 \
--add-host podd2.gosuslugi.ru:109.207.15.58 \
--add-host podd3.gosuslugi.ru:109.207.15.154 \
--add-host podd4.gosuslugi.ru:109.207.15.186 \
--add-host podd-cross.gosuslugi.ru:172.20.59.5 \
--add-host podd1-cross.gosuslugi.ru:109.207.15.26 \
--add-host podd2-cross.gosuslugi.ru:109.207.15.58 \
--add-host podd3-cross.gosuslugi.ru:109.207.15.154 \
--add-host podd4-cross.gosuslugi.ru:109.207.15.186 \
${PORTS} \
--env LANG=en_US.UTF-8 \
--env LC_ALL=en_US.UTF-8 \
--env JDK_JAVA_OPTIONS="" \
${MOUNTS} \
${IMG}:${TAG}
[ $? -eq 0 ] && echo "Application started. Container name: ${IMG}. " || echo "Error starting docker."
Скрипт не требует указания параметров. При выполнении всех шагов, перечисленных в Раздел 3.3.4, Агент СМЭВ4 будет успешно запущен. При повторном выполнении скрипта контейнер будет остановлен и запущен заново.
Для сохранения лога Агента СМЭВ4 в файл, запустите скрипт log-save.sh, приведенный ниже. Лог будет сохранен в файле log-дата-время.txt.
#!/bin/bash
NAME="einfahrt"
LOGFILE="log-$(date +%Y%m%d-%H%M%S).txt"
echo "Check for container presence, gathering log"
if [ ! -z $(docker ps -a |awk '{print $NF}'|grep "^${NAME}$") ]; then
docker logs ${NAME} >${LOGFILE} 2>&1
echo "Log file gathered; See ${LOGFILE} for details"
else
echo "ERROR: No container process found"
exit 1
fi
Остановка контейнера осуществляется командой docker stop einfahrt.
Примечание
В ряде случаев может наблюдаться остановка контейнера через несколько секунд после запуска, с сообщением в логе java.lang.IllegalStateException: Ошибка вызова функции acquireContext: 0x8009001a. В этом случае следует изменить владельца каталога keys и вложенных подкаталогов и файлов на пользователя с id=1000 (потребуются root права): chown -R 1000 keys после чего повторить выполнение скрипта запуска контейнера.
3.4. Обновление Агента СМЭВ4
Для обновления версии Агента СМЭВ4 необходимо выполнить следующие шаги:
Скачать с портала ЕСКС образцы файлов конфигурирования нужной версии.
Заполнить файл конфигурации
application.yamlактуальными данными в соответствии с описанием Раздел 4.3.Из пакета с дистрибутивом скопировать новую версию исполняемого файла Агента
app.jarв каталог/distr/einfahrt/app, как указано в Раздел 3.2.2.Проверить файл
einfahrt.serviceна соответствие с описанием в Раздел 3.2.3Перезапустить Агент СМЭВ4.
Для обновления версии Агента СМЭВ4 с использованием Docker необходимо выполнить шаги описанные в Раздел 3.3.4 и Раздел 3.3.5.
3.4.1. Информация по лицензированию CryptoPro
Входящий в поставку дистрибутив CryptoPro не имеет предустановленной лицензии, и может работать в «пробном режиме» в течение трех месяцев с момента создания образа (не с момента первого запуска!)
Для использования пробной версии CryptoPro не требуется каких-либо дополнительных действий, касающихся лицензирования.
В случае, если имеется в наличии полная серверная лицензия на CryptoPro CSP, предусмотрена возможность передачи номера лицензий CSP при запуске контейнера. При передаче валидной лицензии CryptoPro будет лицензирована на этапе запуска.
Для этого необходимо, чтобы текстовый файл, содержащий строку с лицензией на CryptoPro CSP, был при запуске контейнера
доступен внутри контейнера по пути /egov/csp.lic.
При запуске под Docker можно для этого монтировать внешние файлы, содержащие номера лицензии, по указанным выше путям.
Для того, чтобы прилагаемый скрипт запуска применил лицензию CryptoPro, при её наличии, её необходимо поместить в текстовый файл ``licenses/csp.txt``. При отсутствии лицензии и использовании пробной версии CryptoPro не создавайте указанные файлы.
Внимание
Срок действия пробной лицензии – 90 дней с момента создания Docker image используемого Агента. Для сохранения работоспособности Агента СМЭВ4 по окончании данного периода необходимо приобрести лицензию на CryptoPro CSP и внести ее в систему, как указано выше.