Базы данных AlterOffice-cloud — различия между версиями
(Пути сертификатов и ключа в файле настроек) |
м (→config.php) |
||
(не показаны 32 промежуточные версии этого же участника) | |||
Строка 41: | Строка 41: | ||
=== Безопасное соединение с MariaDB === | === Безопасное соединение с MariaDB === | ||
− | Для настроек необходимо, чтобы | + | Для настроек необходимо, чтобы администратор баз данных был sudoers, т. е. в группе wheel. |
<!-- | <!-- | ||
sudo | sudo | ||
Строка 112: | Строка 112: | ||
# /etc/my.cnf.d/ssl/certs/MariaDB_client.crt: OK | # /etc/my.cnf.d/ssl/certs/MariaDB_client.crt: OK | ||
− | ==== Настройка | + | ==== Настройка сервера MariaDB для использования SSL ==== |
<!-- chmod +r /etc/my.cnf.d/ssl -R --> | <!-- chmod +r /etc/my.cnf.d/ssl -R --> | ||
− | Отредактируйте файл | + | Отредактируйте файл '''/etc/my.cnf.d/server.cnf''' следующим образом: |
<!-- Возможные пути /etc/mysql/mariadb.conf.d/50-server.cnf или /etc/mysql/mariadb.cnf --> | <!-- Возможные пути /etc/mysql/mariadb.conf.d/50-server.cnf или /etc/mysql/mariadb.cnf --> | ||
Строка 139: | Строка 139: | ||
systemctl status mariadb --no-pager --full | systemctl status mariadb --no-pager --full | ||
− | ==== Настройка | + | ==== Настройка клиента MariaDB для использования SSL ==== |
Для использования SSL отредактируйте /etc/my.cnf.d/mysql-clients.cnf: | Для использования SSL отредактируйте /etc/my.cnf.d/mysql-clients.cnf: | ||
Строка 227: | Строка 227: | ||
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET wait_timeout = 28800', | PDO::MYSQL_ATTR_INIT_COMMAND => 'SET wait_timeout = 28800', | ||
], | ], | ||
+ | |||
== PostgreSQL == | == PostgreSQL == | ||
− | PostgreSQL обеспечивает более высокую производительность и в целом имеет | + | PostgreSQL обеспечивает более высокую производительность и в целом имеет мало функциональных отличий от MariaDB/MySQL. |
+ | Подробную информацию о PostgreSQL можно найти на сайте разработчиков postgresql.org. | ||
+ | |||
+ | === Установка PostgreSQL === | ||
+ | Если вы хотите запустить свою базу данных на том же хосте, что и установка AlterOffice-cloud, настройте и запустите postgresql. | ||
+ | |||
+ | Установка в общем виде: | ||
+ | yum install libpq postgresql postgresql-private-libs postgresql-server | ||
+ | |||
+ | Установите дополнительный пакет php-pgsql: | ||
+ | yum install php-pgsql | ||
+ | |||
+ | в качестве зависимости и включите соответствующее расширение PHP в файле php.ini: | ||
+ | extension=pdo_pgsql | ||
+ | |||
+ | |||
+ | === Создание учетной записи на сервере PostgreSQL === | ||
+ | |||
+ | База данных работает от пользователя '''postgres'''. Создайте рабочий каталог и настройте права для пользователя: | ||
+ | sudo -i mkdir -p /var/pgsql/data/alteroffice | ||
+ | sudo -i chown postgres:postgres /var/pgsql/data/alteroffice | ||
+ | PostgreSQL создает файлы блокировки в каталогах run/postgresql. Исправляем ошибку | ||
+ | |||
+ | ''FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock": No such file or directory'' | ||
+ | |||
+ | sudo -i mkdir -p /run/postgresql /var/run/postgresql | ||
+ | sudo -i chown postgres:postgres /run/postgresql /var/run/postgresql | ||
+ | |||
+ | Исправляем ошибку | ||
+ | |||
+ | ''could not save history to file "/var/lib/postgres/.psql_history": No such file or directory'' | ||
+ | sudo -i mkdir -p /var/lib/postgres | ||
+ | sudo -i touch /var/lib/postgres/.psql_history | ||
+ | sudo -i chown postgres:postgres /var/lib/postgres/.psql_history | ||
+ | |||
+ | Дальше переходим в окружение postgres: | ||
+ | sudo -u postgres bash | ||
+ | cd /var/pgsql/data/alteroffice | ||
+ | |||
+ | Не забудьте инициализировать базу данных с помощью '''initdb'''. | ||
+ | initdb -D /var/pgsql/data/alteroffice --locale='ru_RU.utf8' | ||
+ | |||
+ | Теперь вы можете запустить сервер баз данных: | ||
+ | pg_ctl -D /var/pgsql/data/alteroffice -l /var/pgsql/data/alteroffice/log.txt start | ||
+ | |||
+ | Для дополнительной безопасности в этом сценарии рекомендуется настроить PostgreSQL на прослушивание только локального сокета UNIX: | ||
+ | vi /var/pgsql/data/alteroffice/postgresql.conf | ||
+ | listen_addresses = '' | ||
+ | |||
+ | После этого запустите инструмент CLI PostgreSQL '''psql''': | ||
+ | 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, который вам нужно выбрать. | ||
+ | |||
+ | <!-- | ||
+ | Теперь настройте схему базы данных 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, чтобы узнать о других параметрах. | ||
+ | --> | ||
+ | |||
+ | === Безопасное соединение с PostgreSQL === | ||
+ | Для безопасного запуска AlterOffice-cloud с базой PostgreSQL предполагается, что только AlterOffice-cloud использует эту базу данных и, следовательно, только один пользователь имеет доступ к базе данных. Для дополнительных сервисов и пользователей мы рекомендуем создать отдельную базу данных или экземпляр PostgreSQL. | ||
+ | |||
+ | ==== Улучшение безопасности установки ==== | ||
+ | Для повышения уровня безопасности системы в PostgreSQL: | ||
+ | * для работы не требуются права суперпользователя | ||
+ | * серверу доступен один каталог с данными кластера базы данных '''/var/pgsql/data/alteroffice'''. | ||
+ | * встроена поддержка SSL для шифрования трафика между клиентом и сервером, включается в конфигурационном файле '''/var/pgsql/data/alteroffice/postgresql.conf''' | ||
+ | ssl = on | ||
+ | |||
+ | ==== Сертификаты ==== | ||
+ | Создайте каталог для сертификатов: | ||
+ | mkdir -p /var/pgsql/data/alteroffice/ssl/{private,certs} | ||
+ | cd /var/pgsql/data/alteroffice/ssl | ||
+ | |||
+ | При создании сертификатов необходимо корректно заполнить поля, в часности поле '''CN/Common Name/Общее имя''': | ||
+ | * имя корневого сертификата: '''PostgreSQL_CA''' | ||
+ | * имя сервера сертификата: '''PostgreSQL_server''' | ||
+ | * имя клиента сертификата: '''PostgreSQL_client''' | ||
+ | |||
+ | ==== Создание CA/корневого сертификата ==== | ||
+ | # PostgreSQL_CA | ||
+ | /usr/bin/openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt | ||
+ | |||
+ | ==== Создание сертификата сервера ==== | ||
+ | Для создания ключа сервера, выполните: | ||
+ | # PostgreSQL_server | ||
+ | /usr/bin/openssl req -newkey rsa:4096 -days 365 -nodes -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server_req.key | ||
+ | Затем обработайте ключ RSA сервера, для этого введите: | ||
+ | /usr/bin/openssl rsa -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key | ||
+ | # Вывод: writing RSA key | ||
+ | |||
+ | Наконец, подпишите сертификат сервера, для этого запустите: | ||
+ | /usr/bin/openssl x509 -req -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server_req.key -days 365 -CA /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt -CAkey /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -set_serial 01 -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt | ||
+ | |||
+ | Теперь у вас должны появиться дополнительные файлы: | ||
+ | |||
+ | * /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt – PostgreSQL файл сертификата сервера. | ||
+ | * /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key – PostgreSQL файл ключа сервера. | ||
+ | |||
+ | Вы должны использовать не менее двух файлов на сервере PostgreSQL и любых других узлах, которые вы собираетесь использовать для трафика кластера/репликации. Эти два файла будут защищать связь на стороне сервера. | ||
+ | |||
+ | Установите биты доступа файлов, так как сервер не примет файлы, если разрешения будут более либеральными: | ||
+ | chmod og-rwx /var/pgsql/data/alteroffice/ssl -R | ||
+ | |||
+ | ==== Создание сертификата клиента ==== | ||
+ | Клиент PostgreSQL, и приложение PHP/Python/Perl/Ruby будет использовать сертификат клиента для защиты соединения клиента. Вы должны установить следующие файлы на всех ваших клиентах, включая веб-сервер. Чтобы создать клиентский ключ, запустите: | ||
+ | # PostgreSQL_client | ||
+ | /usr/bin/openssl req -newkey rsa:4096 -days 365 -nodes -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client_req.key | ||
+ | |||
+ | Затем обработайте ключ клиента RSA, для этого введите | ||
+ | |||
+ | /usr/bin/openssl rsa -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key | ||
+ | # Вывод: writing RSA key | ||
+ | |||
+ | Наконец, подпишите сертификат клиента, для этого запустите: | ||
+ | |||
+ | /usr/bin/openssl x509 -req -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client_req.key -days 365 -CA /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt -CAkey /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -set_serial 01 -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt | ||
+ | |||
+ | ==== Как проверить сертификаты? ==== | ||
+ | Введите следующую команду для проверки сертификатов, чтобы убедиться, что все было сделано правильно: | ||
+ | |||
+ | /usr/bin/openssl verify -CAfile /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt | ||
+ | # Примеры возможных выводов данных, когда нет ошибок: | ||
+ | # /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt: OK | ||
+ | # /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt: OK | ||
+ | |||
+ | ==== Настройка сервера PostgreSQL для использования SSL ==== | ||
+ | |||
+ | Отредактируйте файл '''/var/pgsql/data/alteroffice/postgresql.conf''' следующим образом: | ||
+ | |||
+ | vi /var/pgsql/data/alteroffice/postgresql.conf | ||
+ | |||
+ | Нажмите клавишу "i" и вставьте следующие настройки: | ||
+ | <blockquote> | ||
+ | ''### PostgreSQL Server ###''<br> | ||
+ | ''## Защита базы данных с помощью SSL и сертификатов ##''<br> | ||
+ | ssl = on<br> | ||
+ | ''# сертификаты доверенных ЦС позволяют проверить, что сертификат клиента подписан доверенным центром сертификации''<br> | ||
+ | ssl_ca_file = ''''/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt''''<br> | ||
+ | ''# сертификат сервера отправляется клиенту для идентификации сервера''<br> | ||
+ | ssl_cert_file = ''''/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt''''<br> | ||
+ | ''# закрытый ключ сервера подтверждает, что сертификат сервера был передан его владельцем''<br> | ||
+ | ssl_key_file = ''''/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key''''<br> | ||
+ | ''# сертификаты, отозванные центрами сертификации, сертификат клиента должен отсутствовать в этом списке''<br> | ||
+ | ''# ssl_crl_file''<br> | ||
+ | <br> | ||
+ | <br> | ||
+ | # Настройте адрес или имя узла сервера<br> | ||
+ | listen_address = '0.0.0.0'<br> | ||
+ | </blockquote> | ||
+ | |||
+ | Сохраните и закройте файл, нажав три клавиши по очереди ":wq". | ||
+ | |||
+ | |||
+ | Имя клиента, инициировавшего подключение, может не совпадать с именем пользователя базы данных, под которым он хочет подключиться. Добавляем строки в файл '''pg_ident.conf''': | ||
+ | <!-- psql: error: connection to server at "192.168.0.103", port 5432 failed: FATAL: certificate authentication failed for user "alteroffice_user" --> | ||
+ | vi /var/pgsql/data/alteroffice/pg_ident.conf | ||
+ | |||
+ | # MAPNAME SYSTEM-USERNAME PG-USERNAME | ||
+ | altermap PostgreSQL_client alteroffice_user | ||
+ | |||
+ | |||
+ | Аутентификация клиентов управляется конфигурационным файлом, который традиционно называется '''pg_hba.conf'''. HBA расшифровывается как host-based authentication — аутентификации по имени узла. | ||
+ | vi /var/pgsql/data/alteroffice/pg_hba.conf | ||
+ | Укажите адрес или имя узла вашего клиента: | ||
+ | #тип база пользователь адрес метод-аутентификации [параметры-аутентификации] | ||
+ | hostssl alteroffice_user alteroffice_user 0.0.0.0 cert map=altermap | ||
+ | |||
+ | |||
+ | Вы можете перезапустить PostgreSQL следующим образом: | ||
+ | <!-- systemctl restart postgresql | ||
+ | systemctl status postgresql --no-pager --full | ||
+ | |||
+ | /usr/lib/systemd/system/postgresql.service | ||
+ | |||
+ | [Unit] | ||
+ | Description=PostgreSQL database server | ||
+ | After=network.target | ||
+ | |||
+ | [Service] | ||
+ | Type=notify | ||
+ | TimeoutSec=120 | ||
+ | User=postgres | ||
+ | Group=postgres | ||
+ | |||
+ | Environment=PGROOT=/var/lib/postgres | ||
+ | |||
+ | SyslogIdentifier=postgres | ||
+ | PIDFile=/var/lib/postgres/data/postmaster.pid | ||
+ | RuntimeDirectory=postgresql | ||
+ | RuntimeDirectoryMode=755 | ||
+ | |||
+ | ExecStartPre=/usr/bin/postgresql-check-db-dir /var/pgsql/data/alteroffice | ||
+ | #${PGROOT}/data/alteroffice | ||
+ | ExecStart=/usr/bin/postgres -D /var/pgsql/data/alteroffice | ||
+ | #${PGROOT}/data/alteroffice | ||
+ | ExecReload=/bin/kill -HUP ${MAINPID} | ||
+ | KillMode=mixed | ||
+ | KillSignal=SIGINT | ||
+ | |||
+ | # Due to PostgreSQL's use of shared memory, OOM killer is often overzealous in | ||
+ | # killing Postgres, so adjust it downward | ||
+ | OOMScoreAdjust=-200 | ||
+ | |||
+ | # Additional security-related features | ||
+ | PrivateTmp=true | ||
+ | ProtectHome=true | ||
+ | ProtectSystem=full | ||
+ | NoNewPrivileges=true | ||
+ | ProtectControlGroups=true | ||
+ | ProtectKernelModules=true | ||
+ | ProtectKernelTunables=true | ||
+ | PrivateDevices=true | ||
+ | RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 | ||
+ | RestrictNamespaces=true | ||
+ | RestrictRealtime=true | ||
+ | SystemCallArchitectures=native | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=multi-user.target | ||
+ | |||
+ | --> | ||
+ | pg_ctl -D /var/pgsql/data/alteroffice -l /var/pgsql/data/alteroffice/log.txt restart | ||
+ | |||
+ | ==== Настройка клиента PostgreSQL для использования SSL ==== | ||
+ | |||
+ | Подключение клиента к серверу выполняется командой: | ||
+ | |||
+ | psql " \ | ||
+ | host = 0.0.0.0 \ | ||
+ | port = 5432 \ | ||
+ | dbname = alteroffice_user \ | ||
+ | user = alteroffice_user \ | ||
+ | sslmode = require \ | ||
+ | sslrootcert = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt' \ | ||
+ | sslcert = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt' \ | ||
+ | sslkey = '/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key' \ | ||
+ | " | ||
+ | где 0.0.0.0 необходимо заменить на адрес сервера | ||
+ | |||
+ | ==== Проверка ==== | ||
+ | |||
+ | создадим папки для SSL: | ||
+ | sudo -i mkdir -p /etc/pgsql/ssl/{certs,private} | ||
+ | |||
+ | получим действующие сертификаты и ключ: | ||
+ | sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt /etc/pgsql/ssl/certs/PostgreSQL_CA.crt | ||
+ | sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt /etc/pgsql/ssl/certs/PostgreSQL_client.crt | ||
+ | sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key /etc/pgsql/ssl/private/PostgreSQL_client.key | ||
+ | |||
+ | Библиотека клиента в целях безопасности требует, чтобы доступ к сертификатам был только у членов группы | ||
+ | sudo -i chown postgres:postgres /etc/pgsql/ssl -R | ||
+ | sudo -i chmod 600 /etc/pgsql/ssl/*/* | ||
+ | |||
+ | Проверка соединения на python | ||
+ | import sqlalchemy | ||
+ | print(sqlalchemy.__version__) | ||
+ | |||
+ | DATABASE_URI = "postgresql://alteroffice_user:alteroffice_user@192.168.0.101:5432/alteroffice_user" | ||
+ | # sqlalchemy 1.4+ uses postgresql:// instead of postgres:// | ||
+ | ssl_mode = "?sslmode=require&sslcert=/etc/pgsql/ssl/certs/PostgreSQL_client.crt&sslkey=/etc/pgsql/ssl/private/PostgreSQL_client.key&sslrootcert=/etc/pgsql/ssl/certs/PostgreSQL_CA.crt" | ||
+ | DATABASE_URI += ssl_mode | ||
+ | |||
+ | engine = sqlalchemy.create_engine(DATABASE_URI) | ||
+ | engine.connect() | ||
+ | print(engine) | ||
+ | |||
+ | ==== config.php ==== | ||
+ | |||
+ | 'sslmode' => 'require', | ||
+ | 'sslrootcert' => '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt', | ||
+ | 'sslcert' => '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt', | ||
+ | 'sslkey' => '/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key', | ||
− | == | + | == Другие == |
− | В списке поддерживаемых баз данных также есть база данных Oracle. | + | В списке поддерживаемых баз данных также есть база данных Oracle. Любые базы данных, использующие язык структурированных запросов SQL, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных возможно использовать. |
Текущая версия на 21:40, 3 октября 2023
Вам не нужно что-то настраивать дополнительно, если AlterOffice-cloud установлен на одном сервере.
Содержание
- 1 SQLite
- 2 MariaDB
- 2.1 Установка MariaDB
- 2.2 Создание учетной записи на сервере MariaDB
- 2.3 Безопасное соединение с MariaDB
- 2.3.1 Улучшение безопасности установки
- 2.3.2 Сертификаты
- 2.3.3 Создание CA/корневого сертификата
- 2.3.4 Создание сертификата сервера
- 2.3.5 Создание сертификата клиента
- 2.3.6 Как проверить сертификаты?
- 2.3.7 Настройка сервера MariaDB для использования SSL
- 2.3.8 Настройка клиента MariaDB для использования SSL
- 2.3.9 Проверка
- 2.3.10 config.php
- 3 PostgreSQL
- 3.1 Установка PostgreSQL
- 3.2 Создание учетной записи на сервере PostgreSQL
- 3.3 Безопасное соединение с PostgreSQL
- 3.3.1 Улучшение безопасности установки
- 3.3.2 Сертификаты
- 3.3.3 Создание CA/корневого сертификата
- 3.3.4 Создание сертификата сервера
- 3.3.5 Создание сертификата клиента
- 3.3.6 Как проверить сертификаты?
- 3.3.7 Настройка сервера PostgreSQL для использования SSL
- 3.3.8 Настройка клиента PostgreSQL для использования SSL
- 3.3.9 Проверка
- 3.3.10 config.php
- 4 Другие
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
Отредактируйте файл /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.
Установка PostgreSQL
Если вы хотите запустить свою базу данных на том же хосте, что и установка AlterOffice-cloud, настройте и запустите postgresql.
Установка в общем виде:
yum install libpq postgresql postgresql-private-libs postgresql-server
Установите дополнительный пакет php-pgsql:
yum install php-pgsql
в качестве зависимости и включите соответствующее расширение PHP в файле php.ini:
extension=pdo_pgsql
Создание учетной записи на сервере PostgreSQL
База данных работает от пользователя postgres. Создайте рабочий каталог и настройте права для пользователя:
sudo -i mkdir -p /var/pgsql/data/alteroffice sudo -i chown postgres:postgres /var/pgsql/data/alteroffice
PostgreSQL создает файлы блокировки в каталогах run/postgresql. Исправляем ошибку
FATAL: could not create lock file "/run/postgresql/.s.PGSQL.5432.lock": No such file or directory
sudo -i mkdir -p /run/postgresql /var/run/postgresql sudo -i chown postgres:postgres /run/postgresql /var/run/postgresql
Исправляем ошибку
could not save history to file "/var/lib/postgres/.psql_history": No such file or directory
sudo -i mkdir -p /var/lib/postgres sudo -i touch /var/lib/postgres/.psql_history sudo -i chown postgres:postgres /var/lib/postgres/.psql_history
Дальше переходим в окружение postgres:
sudo -u postgres bash cd /var/pgsql/data/alteroffice
Не забудьте инициализировать базу данных с помощью initdb.
initdb -D /var/pgsql/data/alteroffice --locale='ru_RU.utf8'
Теперь вы можете запустить сервер баз данных:
pg_ctl -D /var/pgsql/data/alteroffice -l /var/pgsql/data/alteroffice/log.txt start
Для дополнительной безопасности в этом сценарии рекомендуется настроить PostgreSQL на прослушивание только локального сокета UNIX:
vi /var/pgsql/data/alteroffice/postgresql.conf listen_addresses =
После этого запустите инструмент CLI PostgreSQL psql:
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, который вам нужно выбрать.
Безопасное соединение с PostgreSQL
Для безопасного запуска AlterOffice-cloud с базой PostgreSQL предполагается, что только AlterOffice-cloud использует эту базу данных и, следовательно, только один пользователь имеет доступ к базе данных. Для дополнительных сервисов и пользователей мы рекомендуем создать отдельную базу данных или экземпляр PostgreSQL.
Улучшение безопасности установки
Для повышения уровня безопасности системы в PostgreSQL:
- для работы не требуются права суперпользователя
- серверу доступен один каталог с данными кластера базы данных /var/pgsql/data/alteroffice.
- встроена поддержка SSL для шифрования трафика между клиентом и сервером, включается в конфигурационном файле /var/pgsql/data/alteroffice/postgresql.conf
ssl = on
Сертификаты
Создайте каталог для сертификатов:
mkdir -p /var/pgsql/data/alteroffice/ssl/{private,certs} cd /var/pgsql/data/alteroffice/ssl
При создании сертификатов необходимо корректно заполнить поля, в часности поле CN/Common Name/Общее имя:
- имя корневого сертификата: PostgreSQL_CA
- имя сервера сертификата: PostgreSQL_server
- имя клиента сертификата: PostgreSQL_client
Создание CA/корневого сертификата
# PostgreSQL_CA /usr/bin/openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt
Создание сертификата сервера
Для создания ключа сервера, выполните:
# PostgreSQL_server /usr/bin/openssl req -newkey rsa:4096 -days 365 -nodes -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server_req.key
Затем обработайте ключ RSA сервера, для этого введите:
/usr/bin/openssl rsa -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key # Вывод: writing RSA key
Наконец, подпишите сертификат сервера, для этого запустите:
/usr/bin/openssl x509 -req -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server_req.key -days 365 -CA /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt -CAkey /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -set_serial 01 -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt
Теперь у вас должны появиться дополнительные файлы:
- /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt – PostgreSQL файл сертификата сервера.
- /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key – PostgreSQL файл ключа сервера.
Вы должны использовать не менее двух файлов на сервере PostgreSQL и любых других узлах, которые вы собираетесь использовать для трафика кластера/репликации. Эти два файла будут защищать связь на стороне сервера.
Установите биты доступа файлов, так как сервер не примет файлы, если разрешения будут более либеральными:
chmod og-rwx /var/pgsql/data/alteroffice/ssl -R
Создание сертификата клиента
Клиент PostgreSQL, и приложение PHP/Python/Perl/Ruby будет использовать сертификат клиента для защиты соединения клиента. Вы должны установить следующие файлы на всех ваших клиентах, включая веб-сервер. Чтобы создать клиентский ключ, запустите:
# PostgreSQL_client /usr/bin/openssl req -newkey rsa:4096 -days 365 -nodes -keyout /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client_req.key
Затем обработайте ключ клиента RSA, для этого введите
/usr/bin/openssl rsa -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key -out /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key # Вывод: writing RSA key
Наконец, подпишите сертификат клиента, для этого запустите:
/usr/bin/openssl x509 -req -in /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client_req.key -days 365 -CA /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt -CAkey /var/pgsql/data/alteroffice/ssl/private/PostgreSQL_CA.key -set_serial 01 -out /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt
Как проверить сертификаты?
Введите следующую команду для проверки сертификатов, чтобы убедиться, что все было сделано правильно:
/usr/bin/openssl verify -CAfile /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt # Примеры возможных выводов данных, когда нет ошибок: # /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt: OK # /var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt: OK
Настройка сервера PostgreSQL для использования SSL
Отредактируйте файл /var/pgsql/data/alteroffice/postgresql.conf следующим образом:
vi /var/pgsql/data/alteroffice/postgresql.conf
Нажмите клавишу "i" и вставьте следующие настройки:
### PostgreSQL Server ###
## Защита базы данных с помощью SSL и сертификатов ##
ssl = on
# сертификаты доверенных ЦС позволяют проверить, что сертификат клиента подписан доверенным центром сертификации
ssl_ca_file = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt'
# сертификат сервера отправляется клиенту для идентификации сервера
ssl_cert_file = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_server.crt'
# закрытый ключ сервера подтверждает, что сертификат сервера был передан его владельцем
ssl_key_file = '/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_server.key'
# сертификаты, отозванные центрами сертификации, сертификат клиента должен отсутствовать в этом списке
# ssl_crl_file
# Настройте адрес или имя узла сервера
listen_address = '0.0.0.0'
Сохраните и закройте файл, нажав три клавиши по очереди ":wq".
Имя клиента, инициировавшего подключение, может не совпадать с именем пользователя базы данных, под которым он хочет подключиться. Добавляем строки в файл pg_ident.conf:
vi /var/pgsql/data/alteroffice/pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME altermap PostgreSQL_client alteroffice_user
Аутентификация клиентов управляется конфигурационным файлом, который традиционно называется pg_hba.conf. HBA расшифровывается как host-based authentication — аутентификации по имени узла.
vi /var/pgsql/data/alteroffice/pg_hba.conf
Укажите адрес или имя узла вашего клиента:
#тип база пользователь адрес метод-аутентификации [параметры-аутентификации] hostssl alteroffice_user alteroffice_user 0.0.0.0 cert map=altermap
Вы можете перезапустить PostgreSQL следующим образом:
pg_ctl -D /var/pgsql/data/alteroffice -l /var/pgsql/data/alteroffice/log.txt restart
Настройка клиента PostgreSQL для использования SSL
Подключение клиента к серверу выполняется командой:
psql " \ host = 0.0.0.0 \ port = 5432 \ dbname = alteroffice_user \ user = alteroffice_user \ sslmode = require \ sslrootcert = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt' \ sslcert = '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt' \ sslkey = '/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key' \ "
где 0.0.0.0 необходимо заменить на адрес сервера
Проверка
создадим папки для SSL:
sudo -i mkdir -p /etc/pgsql/ssl/{certs,private}
получим действующие сертификаты и ключ:
sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt /etc/pgsql/ssl/certs/PostgreSQL_CA.crt sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt /etc/pgsql/ssl/certs/PostgreSQL_client.crt sudo -i rsync -arv postgres@PostgreSQL_server:/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key /etc/pgsql/ssl/private/PostgreSQL_client.key
Библиотека клиента в целях безопасности требует, чтобы доступ к сертификатам был только у членов группы
sudo -i chown postgres:postgres /etc/pgsql/ssl -R sudo -i chmod 600 /etc/pgsql/ssl/*/*
Проверка соединения на python
import sqlalchemy print(sqlalchemy.__version__) DATABASE_URI = "postgresql://alteroffice_user:alteroffice_user@192.168.0.101:5432/alteroffice_user" # sqlalchemy 1.4+ uses postgresql:// instead of postgres:// ssl_mode = "?sslmode=require&sslcert=/etc/pgsql/ssl/certs/PostgreSQL_client.crt&sslkey=/etc/pgsql/ssl/private/PostgreSQL_client.key&sslrootcert=/etc/pgsql/ssl/certs/PostgreSQL_CA.crt" DATABASE_URI += ssl_mode engine = sqlalchemy.create_engine(DATABASE_URI) engine.connect() print(engine)
config.php
'sslmode' => 'require', 'sslrootcert' => '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_CA.crt', 'sslcert' => '/var/pgsql/data/alteroffice/ssl/certs/PostgreSQL_client.crt', 'sslkey' => '/var/pgsql/data/alteroffice/ssl/private/PostgreSQL_client.key',
Другие
В списке поддерживаемых баз данных также есть база данных Oracle. Любые базы данных, использующие язык структурированных запросов SQL, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных возможно использовать.