Установка приложений Spring Boot: установка в качестве службы init.d (System V)

Приложение Spring Boot можно легко запустить как сервисы Unix/Linux с помощью init.d или systemd.

Если вы сконфигурировали подключаемый модуль Spring Boot Maven или Gradle для создания полностью исполняемого jar-файла и не используете настраиваемый внедренный LaunchScript, ваше приложение можно использовать в качестве службы init.d. Для этого сделайте символическую ссылку на jar-файл с init.d для поддержки стандартных команд start, stop, restart и status.

Скрипт поддерживает следующие функции:

  • Запускает сервисы как пользователь, которому принадлежит файл jar
  • Отслеживает PID приложения с помощью /var/run/<appname>/<appname>.pid
  • Записывает журналы консоли в /var/log/<appname>.log

Предполагая, что у вас установлено приложение Spring Boot в /var/myapp, чтобы установить приложение Spring Boot в качестве службы init.d, создайте символическую ссылку следующим образом:

$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp

После установки вы можете запускать и останавливать службу обычным способом. Например, в системе на основе Debian вы можете запустить ее с помощью следующей команды:

$ service myapp start

Если ваше приложение не запускается, проверьте файл журнала, записанный в /var/log/<appname>.log, на наличие ошибок.

Вы также можете пометить приложение для автоматического запуска с помощью стандартных инструментов операционной системы. Например, в Debian вы можете использовать следующую команду:

$ update-rc.d myapp defaults <priority>

Защита службы init.d

Ниже приведен ряд рекомендаций по обеспечению безопасности приложения Spring Boot, которое запускается как служба init.d. Он не предназначен для того, чтобы быть исчерпывающим списком всего, что должно быть сделано для защиты приложения и среды, в которой оно выполняется.

При выполнении от имени пользователя root, как и в случае использования root для запуска службы init.d, исполняемый скрипт по умолчанию запускает приложение от имени пользователя, указанного в переменной среды RUN_AS_USER. Если переменная окружения не задана, вместо нее используется пользователь, которому принадлежит файл jar. Никогда не запускайте приложение Spring Boot от имени пользователя root, поэтому RUN_AS_USER никогда не должен быть пользователем root, а файл jar вашего приложения никогда не должен принадлежать пользователю root. Вместо этого создайте конкретного пользователя для запуска приложения и задайте переменную среды RUN_AS_USER или используйте chown, чтобы сделать его владельцем файла jar, как показано в следующем примере:

$ chown bootapp:bootapp your-app.jar

В этом случае исполняемый скрипт по умолчанию запускает приложение от имени пользователя bootapp.

Чтобы уменьшить вероятность того, что учетная запись пользователя приложения будет скомпрометирована, вам следует подумать о том, чтобы запретить ей использовать оболочку входа. Например, вы можете установить оболочку учетной записи в /usr/sbin/nologin.

Вам также следует принять меры, чтобы предотвратить изменение файла jar вашего приложения. Во-первых, настройте его разрешения так, чтобы он не мог быть записан и мог быть прочитан или выполнен только его владельцем, как показано в следующем примере:

$ chmod 500 your-app.jar

Во-вторых, вы также должны предпринять шаги, чтобы ограничить ущерб, если ваше приложение или учетная запись, в которой оно работает, скомпрометированы. Если злоумышленник получит доступ, он может сделать файл jar доступным для записи и изменить его содержимое. Один из способов защиты от этого - сделать его неизменным с помощью chattr, как показано в следующем примере:

$ sudo chattr +i your-app.jar

Это предотвратит изменение пользователем jar любого пользователя, включая root.

Если root используется для управления службой приложения, а вы используете файл .conf для настройки его запуска, то файл .conf читается и оценивается пользователем root. Это должно быть обеспечено соответственно. Используйте chmod, чтобы файл мог прочитать только владелец, и используйте chown, чтобы сделать root владельцем, как показано в следующем примере:

$ chmod 400 your-app.conf
$ sudo chown root:root your-app.conf


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки