Базы данных AlterOffice-cloud

Материал из Wiki AlterOS
Версия от 14:13, 21 сентября 2023; Parkhomenko.av (обсуждение | вклад) (Настройка сервер MariaDB для использования SSL)

Перейти к: навигация, поиск

Вам не нужно что-то настраивать дополнительно, если AlterOffice-cloud установлен на одном сервере.

SQLite

SQLite в основном поддерживается для тестовых установок и не рекомендуется для производственных серверов.

MariaDB

MariaDB/MySQL — канонический выбор для AlterOffice-cloud.

Установка MariaDB

Установка в общем виде:

   sudo yum install mariadb-server mariadb

Установка инсталлятором для AlterOffice-cloud:

   sudo yum install  MariaDB-server MariaDB-client

Создание учетной записи на сервере MariaDB

Запустите в консоли сервера команду:

   mysql -u root -p
   # введите пароль

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

Вы можете проверить это с помощью:

   SELECT host FROM mysql.user WHERE User = 'alteroffice_user';

Если вы видите результаты только с localhost и 127.0.0.1, вы не можете подключиться из внешнего источника. Если вы видите другие IP-адреса, а не тот, с которого подключаетесь — это тоже показатель.

Вам нужно будет добавить IP-адрес каждой системы, к которой вы хотите предоставить доступ, а затем предоставить привилегии:

   CREATE USER 'alteroffice_user'@'MariaDB_client_ip_address' IDENTIFIED BY 'some_pass';
   GRANT ALL PRIVILEGES ON *.* TO 'alteroffice_user'@'MariaDB_client_ip_address';

Если вы видите %, то это совсем другая проблема: любой удаленный источник. Однако если вы хотите, чтобы какие-либо/все системы подключались через alteroffice_user, используйте подстановочный знак % для предоставления доступа:

   CREATE USER 'alteroffice_user'@'%' IDENTIFIED BY 'some_pass';
   GRANT ALL PRIVILEGES ON *.* TO 'alteroffice_user'@'%';

Наконец, перезагрузите разрешения, и вы сможете иметь удаленный доступ:

   FLUSH PRIVILEGES;

Безопасное соединение с MariaDB

Для настроек необходимо, чтобы администрир баз данных был sudoers, т. е. в группе wheel. Чтобы добавить пользователя в группу:

   usermod -aG wheel username

Чтобы удалить пользователя из группы, используйте команду gpasswd с опцией -d следующим образом:

   gpasswd -d wheel username

Улучшение безопасности установки

   mysql_secure_installation

Эта программа позволяет вам повысить безопасность вашей установки MariaDB следующими способами:

  • Вы можете установить пароль для учетных записей root.
  • Вы можете удалить учетные записи root, доступные за пределами локального хоста.
  • Вы можете удалить учетные записи анонимных пользователей.
  • Вы можете удалить тестовую базу данных, к которой по умолчанию имеют доступ анонимные пользователи.

Сертификаты

Создайте каталог для сертификатов:

   sudo -i mkdir -p /etc/my.cnf.d/ssl/{private,certs}
   cd /etc/my.cnf.d/ssl

При создании сертификатов необходимо корректно заполнить поля, в часности поле CN/Common Name/Общее имя:

  • имя корневого сертификата: MariaDB_CA
  • имя сервера сертификата: MariaDB_server
  • имя клиента сертификата: MariaDB_client

Создание CA/корневого сертификата

   # MariaDB_CA
   sudo -i /usr/bin/openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/my.cnf.d/ssl/private/MariaDB_CA.key -out /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt

Создание сертификата сервера

Для создания ключа сервера, выполните:

   # MariaDB_server
   sudo -i /usr/bin/openssl  req -newkey rsa:4096 -days 365 -nodes -keyout /etc/my.cnf.d/ssl/private/MariaDB_server.key -out /etc/my.cnf.d/ssl/private/MariaDB_server_req.key

Затем обработайте ключ RSA сервера, для этого введите:

   sudo -i /usr/bin/openssl rsa -in /etc/my.cnf.d/ssl/private/MariaDB_server.key -out /etc/my.cnf.d/ssl/private/MariaDB_server.key
   # Вывод: writing RSA key

Наконец, подпишите сертификат сервера, для этого запустите:

   sudo -i /usr/bin/openssl x509 -req -in /etc/my.cnf.d/ssl/private/MariaDB_server_req.key -days 365 -CA /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt -CAkey /etc/my.cnf.d/ssl/private/MariaDB_CA.key -set_serial 01 -out /etc/my.cnf.d/ssl/certs/MariaDB_server.crt

Теперь у вас должны появиться дополнительные файлы:

  • /etc/my.cnf.d/ssl/certs/MariaDB_server.crt – MariaDB файл сертификата сервера.
  • /etc/my.cnf.d/ssl/private/MariaDB_server.key – MariaDB файл ключа сервера.

Вы должны использовать не менее двух файлов на сервере MariaDB и любых других узлах, которые вы собираетесь использовать для трафика кластера/репликации. Эти два файла будут защищать связь на стороне сервера.

Создание сертификата клиента

Клиент mysql, и приложение PHP/Python/Perl/Ruby будет использовать сертификат клиента для защиты соединения клиента. Вы должны установить следующие файлы на всех ваших клиентах, включая веб-сервер. Чтобы создать клиентский ключ, запустите:

   # MariaDB_client
   sudo -i /usr/bin/openssl req -newkey rsa:4096 -days 365 -nodes -keyout /etc/my.cnf.d/ssl/private/MariaDB_client.key -out /etc/my.cnf.d/ssl/private/MariaDB_client_req.key

Затем обработайте ключ клиента RSA, для этого введите

   sudo -i /usr/bin/openssl rsa -in /etc/my.cnf.d/ssl/private/MariaDB_client.key -out /etc/my.cnf.d/ssl/private/MariaDB_client.key
   # Вывод: writing RSA key

Наконец, подпишите сертификат клиента, для этого запустите:

   sudo -i /usr/bin/openssl x509 -req -in /etc/my.cnf.d/ssl/private/MariaDB_client_req.key -days 365 -CA /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt -CAkey /etc/my.cnf.d/ssl/private/MariaDB_CA.key -set_serial 01 -out /etc/my.cnf.d/ssl/certs/MariaDB_client.crt

Как проверить сертификаты?

Введите следующую команду для проверки сертификатов, чтобы убедиться, что все было сделано правильно:

   /usr/bin/openssl verify -CAfile /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt /etc/my.cnf.d/ssl/certs/MariaDB_server.crt /etc/my.cnf.d/ssl/certs/MariaDB_client.crt
   # Примеры возможных выводов данных, когда нет ошибок:
   # /etc/my.cnf.d/ssl/certs/MariaDB_server.crt: OK
   # /etc/my.cnf.d/ssl/certs/MariaDB_client.crt: OK

Настройка сервер MariaDB для использования SSL

Отредактируйте файл vi /etc/my.cnf.d/server.cnf следующим образом:

   sudo -i vi /etc/my.cnf.d/server.cnf

Нажмите клавишу "i" и вставьте в секции [mysqld] и [galera] следующие настройки:

[mysqld] ### MySQL Server ###
## Защита базы данных с помощью SSL и сертификатов ##
## Нет контроля над используемым уровнем протокола. ##
## mariadb будет использовать TLSv1.0 или более позднюю версию. ##
ssl
ssl-ca=/etc/my.cnf.d/ssl/certs/MariaDB_CA.crt
ssl-cert=/etc/my.cnf.d/ssl/certs/MariaDB_server.crt
sl-key=/etc/my.cnf.d/ssl/private/MariaDB_server.key

[galera] bind-address=0.0.0.0

Сохраните и закройте файл, нажав три клавиши по очереди ":wq". Вы можете перезапустить mariadb следующим образом:

   sudo -i systemctl restart mariadb
           systemctl status mariadb  --no-pager --full

Настройка клиент MariaDB для использования SSL

Для использования SSL отредактируйте /etc/my.cnf.d/mysql-clients.cnf:

   sudo -i vi /etc/my.cnf.d/mysql-clients.cnf

Добавьте в раздел [mysql]:

## MySQL Client Configuration ##
ssl-ca=/etc/my.cnf.d/ssl/certs/MariaDB_CA.crt
ssl-cert=/etc/my.cnf.d/ssl/certs/MariaDB_client.crt
ssl-key=/etc/my.cnf.d/ssl/private/MariaDB_client.key
### This option is disabled by default ###
### ssl-verify-server-cert ###

Сохраните и закройте файл.

Проверка

На клиентском сервере удалим возможные сертификаты и ключи

   sudo -i rm -rf /etc/my.cnf.d/ssl/{private,certs}
   sudo -i mkdir -p /etc/my.cnf.d/ssl/{private,certs}

и получим действующие сертификаты и ключ

   sudo -i rsync -arv user@MariaDB_server:/etc/my.cnf.d/ssl/private/MariaDB_client.key /etc/my.cnf.d/ssl/private/MariaDB_client.key
   sudo -i rsync -arv user@MariaDB_server:/etc/my.cnf.d/ssl/certs/MariaDB_client.crt /etc/my.cnf.d/ssl/certs/MariaDB_client.crt
   sudo -i rsync -arv user@MariaDB_server:/etc/my.cnf.d/ssl/certs/MariaDB_CA.crt /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt

PostgreSQL

PostgreSQL обеспечивает более высокую производительность и в целом имеет меньше особенностей по сравнению с MariaDB/MySQL.

Oracle

В списке поддерживаемых баз данных также есть база данных Oracle. Этот продукт здесь не будет рассмотрен.