Установка и настройка Svacer на Rocky Linux

Обновлено и опубликовано Опубликовано:

Используемые термины: SvacerRocky, Linux.

Мы рассмотрим процесс установки, настройки и использования веб-портала Svacer на Rocky Linux. Мы будем использовать следующие программные продукты:

  • Система Rocky Linux 9.
  • СУБД PostgreSQL 15.
  • HTTP-прокси NGINX.

В итоге, мы получим:

  1. Рабочий веб-портал Svacer для просмотра и обработки результатов статического анализа.
  2. Проксирование запросов через nginx с использованием https.

Приступим.

Предварительная настройка

Прежде чем перейти к настройке, подготовим нашу систему.

Время

1. Устанавливаем часовой пояс:

timedatectl set-timezone Europe/Moscow

* данной командой мы установим часовой пояс по московскому времени.

Посмотреть все доступные часовые пояса можно командой:

timedatectl list-timezones

2. Устанавливаем и запускаем службу для автоматической синхронизации времени:

dnf install chrony

systemctl enable chronyd --now

Настройка безопасности

Для корректной работы портала по сети, нам необходимо уделить внимание некоторым аспектам безопасности.

1. Настройка SELinux:

Вводим команду:

setsebool -P httpd_can_network_connect on

* данное правило разрешает httpd-сервису и веб-скриптам подключение по сети.

Или мы можем отключить SELinux, но желательно, ограничиться вышеописанной политикой.

2. Открываем необходимые порты в брандмауэре:

firewall-cmd --permanent --add-service={http,https}

firewall-cmd --reload

* где http и https — сервисы для веб-сервера (порты 80 и 443).

Читайте подробнее про настройку firewalld.

Установка и настройка PostgreSQL

В качестве СУБД мы должны использовать PostgreSQL. В нашем примере это будет версия 15. В Rocky Linux нужная версия сервера баз данных может быть установлена с использованием модулей репозитория postgresql. Разрешаем его использование:

dnf module disable postgresql

dnf module enable postgresql:15

* первой командой мы отключили любой используемый модуль postgresql, если он был включен. Вторая команда разрешает использование репозитория для PostgreSQL версии 15.

Выполняем установку postgresql:

dnf install postgresql-server postgresql-contrib

Инициализируем базу:

postgresql-setup initdb

Разрешаем и стартуем сервис, проверяем, что он запущен:

systemctl enable postgresql --now

systemctl status postgresql

Открываем командную строку postgresql:

sudo -upostgres psql

Создаем базу данных и пользователя:

> create database svace;

> create user svace with encrypted password 'svace';

* мы создали базу svace, а также одноименного пользователя с таким же паролем.

Предоставляем пользователю svace все права на базу svace:

> grant all privileges on database svace to svace;

Также сделаем его суперпользователем (необходимо для создания расширений в PostgreSQL):

> alter user svace superuser;

С настройкой базы закончили. Выходим из SQL оболочки:

> quit

Открываем конфигурационный файл:

vi /var/lib/pgsql/data/pg_hba.conf

После IPv4 local connections добавляем строку (отмечено желтым):

# IPv4 local connections:
host    svace           svace           127.0.0.1/32            md5
host    all             all             127.0.0.1/32            ident

* важно, чтобы данная строка была выше строки host all all ... Она разрешает подключения к базе данных svace пользователю svace с проверкой пароля, хэш которого md5.

Перезапускаем сервис postgresql:

systemctl restart postgresql

С базой мы закончили.

Установка и запуск Svacer

Устанавливаем curl. Он понадобится для загрузки файла с настройкой репозитория:

dnf install curl

Скачиваем файл репозитория и переносим его в каталог /etc/yum.repos.d:

curl -sLO https://repo.ispras.ru/rpm/ispras.repo

mv ispras.repo /etc/yum.repos.d/

Устанавливаем svacer:

dnf install svacer

* на все запросы подтверждения отвечаем Y.

Проверяем, чтобы в файле конфигурации svacer были выставлены правильные значения для подключения к СУБД:

vi /etc/default/svacer

SVACER_ARGS="--pg postgres://svace:svace@127.0.0.1:5432/svace --store /var/lib/svacer/object_store"

* отмечено желтым, слева направо — имя пользователя и пароль для подключения к СУБД, имя базы данных.

При необходимости, эти значения необходимо поменять.

Теперь можно запустить svacer:

systemctl enable svacer --now

Не забываем проверить, запустилась ли служба:

systemctl status svacer

На порту 8080 запустится веб-приложение. Мы можем отправить запрос для проверки:

curl http://127.0.0.1:8080

В ответ должно вернуться что-то на подобие:

<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.png"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Svace History Server Web UI"/><link rel="manifest" href="/manifest.json"/><script type="text/javascript" src="/api/auth_init.js"></script><title>Connecting to Svace Server</title><script defer="defer" src="/static/js/main.d895a63b.js"></script><link href="/static/css/main.87a4d6b9.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Svacer запущен и работает.

Проксирование через NGINX

Следующим шагом настроить веб-прокси, чтобы обеспечить доступ по стандартным веб-портам.

Устанавливаем веб-сервер:

dnf install nginx

Сразу запустим его службу и разрешим автозапуск:

systemctl enable nginx --now

Создаем конфигурационный файл:

vi /etc/nginx/conf.d/svacer.conf

server {
    listen 80 default_server;

    server_name svacer.dmosk.ru;

    client_max_body_size        0;
    proxy_connect_timeout       600;
    proxy_send_timeout          600;
    proxy_read_timeout          600;
    send_timeout                600;

    location / {
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "upgrade";

        proxy_pass http://127.0.0.1:8080;
    }
}

* где server_name может быть любым (так как у нас данные виртуальный домен является default_server), но лучше указать адрес, по которому пользователи будут заходить на портал.

Проверяем корректность конфигурационного файла и перечитываем конфигурацию nginx:

nginx -t && nginx -s reload

Открываем браузер и переходим по адресу http://<адрес сервера svacer> — должна открыться страница аутентификации Svacer. Вводим логин admin и пароль admin, чтобы войти в систему.

Настройка SSL

Теперь добьемся, чтобы наш портал работал по https. Для начала, нам нужно получить сертификат. Есть несколько способов это сделать:

  • Сгенерировать самоподписанный сертификат (рекомендуется только для тестирования).
  • Купить.
  • Запросить у внутреннего центра сертификации (например, у AD CS).
  • Получить бесплатно через Let's Encrypt.

Как писалось выше, для тестирования нам подойдет сгенерированный самоподписанный сертификат. Сформируем для начала последовательность центра сертификации:

openssl req -newkey rsa:2048 -nodes -keyout /etc/ssl/ca.key -x509 -days 3650 -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ca" -out /etc/ssl/ca.crt

Создадим каталог для хранения сертификатов nginx:

mkdir /etc/nginx/ssl

Сгенерируем файл запроса сертификата и закрытый ключ:

openssl req -newkey rsa:2048 -keyout /etc/nginx/ssl/svacer.key -out /etc/nginx/ssl/svacer.csr -nodes -days 731 -subj "/CN=svacer"

Выдадим клиентский сертификат, заверив его ключом центра сертификации:

openssl x509 -req -in /etc/nginx/ssl/svacer.csr -out /etc/nginx/ssl/svacer.crt -CA /etc/ssl/ca.crt -CAkey /etc/ssl/ca.key -CAcreateserial -days 731

* будет сформирован ключ svacer.crt. Мы используем ключи центра сертификации ca.crt и ca.key, которые сформировали ранее, а открытый ключ указали в nginx для аутентификации клиентов.

Открываем конфигурационный файл nginx:

vi /etc/nginx/conf.d/svacer.conf

Вносим изменения в настроки:

server {
    listen 443 ssl default_server;

    server_name svacer.dmosk.ru;

    ssl_certificate     /etc/nginx/ssl/svacer.crt;
    ssl_certificate_key /etc/nginx/ssl/svacer.key;

    ...

* мы изменили порт 80 на 443 ssl, а также прописали открытый и закрытый ключи сгенерированных сертификатов. В боевой среде данные пути должны быть до ключей сертификата, купленного или полученного у доверенного центра сертификации.

Также добавим блок:

server {
    listen 80;
    server_name svacer.dmosk.ru;
    return 301 https://$host$request_uri;
}

* данная настройка позволит перебросить все запросы с порта 80 на защищенный 443.

Проверяем конфигурацию и перечитываем ее:

nginx -t && nginx -s reload

Открываем браузер и переходим по адресу https://<адрес сервера svacer> — мы увидим предупреждение безопасности, если используем самоподписанный сертификат. Игнорируем и загружаем страницу.

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

1. Правильная настройка SSL в NGINX.

2. Установка и запуск PostgreSQL на CentOS или Rocky.

3. Получение бесплатного SSL сертификата Let's Encrypt.

# DevOps # Rocky Linux # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет