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

Материал из Wiki AlterOS
Перейти к: навигация, поиск

Вам не нужно что-то настраивать дополнительно, если 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 'password';
   GRANT ALL PRIVILEGES ON *.* TO 'alteroffice_user'@'MariaDB_client_ip_address';

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

   CREATE USER 'alteroffice_user'@'%' IDENTIFIED BY 'password';
   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
ssl-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


После ввода в консоли команды

   mysql -u alteroffice_user -h MariaDB_server_ip_address -p
   # введите password

подключится удаленная консоль базы данных и появится приглашение:

MariaDB [(none)]>

Введите:

   SHOW VARIABLES LIKE '%ssl%';

Возможный вывод:

   +---------------------+----------------------------------------------+
   | Variable_name       | Value                                        |
   +---------------------+----------------------------------------------+
   | have_openssl        | YES                                          |
   | have_ssl            | YES                                          |
   | ssl_ca              | /etc/my.cnf.d/ssl/certs/MariaDB_CA.crt       |
   | ssl_capath          |                                              |
   | ssl_cert            | /etc/my.cnf.d/ssl/certs/MariaDB_server.crt   |
   | ssl_cipher          |                                              |
   | ssl_crl             |                                              |
   | ssl_crlpath         |                                              |
   | ssl_key             | /etc/my.cnf.d/ssl/private/MariaDB_server.key |
   | version_ssl_library | OpenSSL 3.1.1 30 May 2023                    |
   +---------------------+----------------------------------------------+

Или выполните команду:

   status

Возможный вывод:

   --------------
   mysql  Ver 15.1 Distrib 10.11.2-MariaDB, for Linux (x86_64) using readline 5.1
   
   Connection id:        4
   Current database:	
   Current user:         alteroffice_user@0.0.0.0
   SSL:                  Cipher in use is TLS_AES_256_GCM_SHA384
   Current pager:        stdout
   Using outfile:        
   Using delimiter:      ;
   Server:               MariaDB
   Server version:       10.11.2-MariaDB AlterOS
   Protocol version:     10
   Connection:           0.0.0.0 via TCP/IP
   Server characterset:  utf8mb4
   Db     characterset:  utf8mb4
   Client characterset:  utf8mb3
   Conn.  characterset:  utf8mb3
   TCP port:             3306
   Uptime:               15 min 33 sec
   
   Threads: 1  Questions: 7  Slow queries: 0  Opens: 17  Open tables: 10  Queries per second avg: 0.007
   --------------

config.php

Добавьте пути сертификатов и ключа в файл настроек. Они будут использоваться при подключении к базе:

   'dbdriveroptions' => [
        PDO::MYSQL_ATTR_SSL_CA => '/etc/my.cnf.d/ssl/certs/MariaDB_CA.crt',
        PDO::MYSQL_ATTR_SSL_KEY => '/etc/my.cnf.d/ssl/private/MariaDB_client.key',
        PDO::MYSQL_ATTR_SSL_CERT => '/etc/my.cnf.d/ssl/certs/MariaDB_client.crt',
        PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false,
        PDO::MYSQL_ATTR_INIT_COMMAND => 'SET wait_timeout = 28800',
    ],

PostgreSQL

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

Подробную информацию о PostgreSQL можно найти на сайте разработчиков postgresql.org. Если вы хотите запустить свою базу данных на том же хосте, что и установка AlterOffice-cloud, настройте и запустите postgresql, если вы еще этого не сделали. Для дополнительной безопасности в этом сценарии рекомендуется настроить PostgreSQL на прослушивание только локального сокета UNIX:

   /var/lib/postgres/data/postgresql.conf
   listen_addresses = 

Не забудьте инициализировать базу данных с помощью initdb. После этого запустите инструмент CLI PostgreSQL psql:

   sudo -u postgres -- psql

и создайте пользователя базы данных alteroffice_user и базу данных с тем же именем

   CREATE USER alteroffice_user WITH PASSWORD 'password';
   CREATE DATABASE alteroffice_user TEMPLATE template0 ENCODING 'UNICODE';
   ALTER DATABASE alteroffice_user OWNER TO alteroffice_user;
   GRANT ALL PRIVILEGES ON DATABASE alteroffice_user TO alteroffice_user;
   \q

password — это заполнитель для пароля пользователя базы данных alteroffice_user, который вам нужно выбрать.

Установите дополнительный пакет php-pgsql в качестве зависимости и включите соответствующее расширение PHP в файле php.ini:

extension=pdo_pgsql

Теперь настройте схему базы данных AlterOffice-cloud с помощью:

   occ maintenance:install \
       --database=pgsql \
       --database-name=alteroffice_user \
       --database-host=/run/postgresql \
       --database-user=alteroffice_user \
       --database-pass=password \
       --admin-pass=password \
       --admin-email=admin-email \
       --data-dir=/var/lib/alteroffice/data

Обратите внимание на заполнители (например, password) и замените их соответствующими значениями. Эта команда предполагает, что вы запускаете свою базу данных на том же хосте, что и AlterOffice-cloud. Введите occ help maintenance:install и ознакомьтесь с документацией AlterOffice-cloud, чтобы узнать о других параметрах.

Oracle

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