7. Рекомендации по безопасной настройке СУБД
7.1. Общие рекомендации
Проверяйте актуальность версии СУБД
Компания "РЕД СОФТ" постоянно работает над улучшением качества своих продуктов, поэтому регулярно выпускаются новые сборки, которые исправляют имеющиеся ошибки, улучшают прикладной функционал или добавляют новые возможности по использованию. Рекомендуемые версии публикуются на сайте РЕД Базы Данных: RedDatabase.
Выбирайте правильную архитектуру СУБД
Существует четыре различных взаимозаменяемых архитектуры сервера:
ClassicServer — один процесс на одно соединение; поддержка многопроцессорных машин. Подходит для мощных систем с несколькими ЦПУ и большим количеством ОЗУ. Данная архитектура не вызывает отказ в обслуживании всех клиентов при сбое одного серверного процесса, и как следствие более надежна.
SuperServer — все соединения используют один процесс, меньшие требования к памяти при большем быстродействии; для многопроцессорных машин (до РЕД Базы Данных 3 для однопроцессорных). Это компактная и высокопроизводительная версия для встраивания в распространяемое ПО.
SuperClassic Server — один процесс, но свой поток на каждое соединение. Комбинация лучшего от SuperServer и Classic. Идеально подходит для виртуализации.
Embedded (встраиваемая) версия — весь движок содержится в одной библиотеке с именем клиентской библиотеки сервера, идеально подходит для однопользовательских систем, не требует инсталляции в Windows.
Если вы не знаете какая архитектура подходит именно вам, то используйте Super Server. Позднее вы сможете изменить архитектуру сервера.
Защитите каталоги
Правильно настройте права доступа к каталогам, где размещается сама СУБД, базы данных, конфигурационные файлы и журналы аудита.
Любой, кто имеет доступ к файловой системе на уровне чтения может скопировать БД и извлечь все данные из неё. Любой, кто имеет права на запись может уничтожить информацию, подменить ее или сделать БД нечитаемой. Как правило, только процесс сервера должен иметь доступ к файлам и каталогам. Пользователи не должны иметь доступа даже на уровне только для чтения. Они будут выполнять запросы к БД через сервер, а сервер гарантирует, что пользователи получают только разрешенный тип доступа к каким-либо объектам в базе данных.
Права на каталог с СУБД и конфигурационные файлы настраиваются автоматически инсталлятором. Их владельцем становится
root. Но файлыfirebird.log, *.fdb, rdb_guardдоступны для записи пользователюfirebird:firebird.Владельцем каталога с базой данных и с журналами аудита должен быть пользователь, от имени которого запускается сервер (в Linux по умолчанию это пользователь
firebird:firebird, в Windows -System). Только владельцу каталога должны быть предоставлены права на запись и чтение.Делайте регулярные копии
Резервное копирование необходимо для возможности быстрого и недорогого восстановления информации (пользовательских баз данных, базы данных безопасности СУБД, конфигурационных файлов настроек СУБД, журналов аудита СУБД) в случае утери рабочей копии информации по какой-либо причине.
Периодичность резервного копирования определяется исходя из важности хранимых данных. Для информации имеющей особенную ценность периодичность должна быть не реже чем 1 раз в сутки.
Утилита
Nbackup, входящая в комплект поставки СУБД, позволяет создавать резервные копии, восстанавливать из резервных копий и дополнительно позволяет создавать инкрементные копии и восстанавливать из них БД. Инкрементная резервная копия содержит только изменения со времени создания определенной,ранее созданной резервной копии.Nbackupпозволяет блокировать файл базы данных и может работать с активной базой данных, не мешая подключенным к ней пользователям. Созданная резервная копия базы данных всегда будет отображать состояние базы данных на момент начала создания резервной копии. Если вы используете инкрементное копирование не забывайте периодически делать полные копии БД.Типичный порядок создания резервной копии: Блокировать базу данных с помощью параметра
-L (Lock):nbackup [-U <пользователь> -P <пароль>] -L <база_данных>
Создать резервную копию, сжать файл базы данных, используя любые другие программы.
Простое копирование файла также допустимо.
Разблокировать базу данных с помощью параметра
-UN (UNlock):nbackup [-U <пользователь> -P <пароль>] -UN <база_данных>
Более подробно об использовании утилит резервного копирования можно прочитать в главе Утилиты командной строки.
Настройте репликацию
Репликация предназначена для обеспечения повышенной отказоустойчивости в случае повреждения физической структуры файла базы данных, вызванной техническим сбоем оборудования, программным сбоем операционной системы или самой СУБД. Репликация — одна из техник масштабирования баз данных. Она подразумевает перенос любых изменений данных в реальном времени с основного рабочего сервера на один или несколько резервных серверов, гарантируя, таким образом, их идентичность с точки зрения хранящихся на них данных. В процессе подключения к основному серверу проверяется наличие и доступность резервных серверов, после чего устанавливается с ними постоянное соединение. Любые сетевые проблемы с данным соединением, обнаруженные в процессе репликации, считаются сбоем резервного сервера. Настройка системы репликации приведена в главе Репликация.
Запускайте СУБД от имени несистемного пользователя
На Unix-подобных системах, СУБД обычно уже запущена от имени пользователя
firebirdпо умолчанию, а неroot.На Windows платформах также необходимо запустить сервис СУБД под заданной учетной записью (например,
firebird). На практике запуск службы от имени пользователяlocalsystemпредставляет угрозу безопасности, тем более если ваша система подключена к сети Интернет.Не создавайте пользовательские БД от пользователя sysdba
Пользователь
sysdba- это аккаунт с полными правами доступа для всех ваших баз данных. Его пароль должен быть известен только нескольким доверенным администраторам. Не используйте этого супер-пользователя для регулярной работы с БД. Вместо этого, создайте учетные записи пользователей и наделите их необходимыми правами.
7.2. Рекомендации по настройке СУБД
Смените пароль SYSDBA
Если вы еще не сделали этого на этапе установки, смените пароль администратора
sysdba. Для этого используйте оператор SQL:ALTER USER SYSDBA PASSWORD '<пароль>';
Используйте псевдонимы для БД
В конфигурационном файле
databases.confможно сопоставить реальный путь к БД и специальный псевдоним, чтобы затем использовать более короткий и удобный псевдоним для обращения к нужной базе данных.Использование псевдонимов БД позволяет скрывать физическое расположение баз данных от конечных пользователей. Например, добавив строку в
databases.conf:personal = C:\DB\WORK\personal.fdb
Пользователям для подключения к БД будет достаточно знать псевдоним БД -
personal.Псевдонимы также позволят вам без проблем перемещать базы данных, ведь клиенты продолжат использовать свои существующие строки подключения.
Псевдонимы начинают работать немедленно как только были добавлены и сохранены - нет необходимости в перезагрузке сервера.
Измените метод аутентификации
СУБД РЕД База Данных поддерживает следующие режимы аутентификации:
Безопасная парольная аутентификация использующая алгоритм хэширования SHA для передачи данных:
Srp, Srp224, Srp256, Srp384, Srp512. По умолчанию используетсяSrp256;Традиционная (
Legacy_Auth) аутентификация, унаследованная от предыдущих версий;
Доверительная (
Win_Sspi) аутентификация для ОС Windows;Метод
GostPasswordобеспечивает аутентификацию с использованием алгоритмов шифрования из криптографического плагина (Crypto_API);Плагин
Certificateпозволяет аутентифицировать пользователей по сертификатам X509;Плагин
VerifyServerпозволяет клиенту проверить сертификат сервера;Доверенная аутентификация через механизм GSSAPI (
Gss).
Изменение режима аутентификации производится с помощью параметров
AuthServer, AuthClientв файле конфигурацииfirebird.conf.Измените стандартный порт подключения
Измените имя сервиса (
RemoteServiceName) или стандартный порт подключения (RemoteServicePort), которые будут использоваться для клиентских баз данных. Изменять следует только один из этих параметров, не оба сразу.RemoteServicePort = 49156
Эти параметры позволяют усложнить идентификацию злоумышленником вашего сервера в локальной сети.
Защитите сервер от атаки перебором паролей
Пользователям можно назначить политику, которая будет отвечать за максимальное количество неудачных попыток входа, после которых учетная запись будет заблокирована.
CREATE POLICY BanPolicy AS MAX_FAILED_COUNT=5;
При заданной длине и наборе возможных символов труднее всего взломать пароли в виде строки случайных символов. Они достаточно долго выдерживают атаку полным перебором (из-за высокой энтропии), но их и труднее всего запомнить. Создайте политику безопасности, которая не позволит пользователям использовать простые пароли.
PSWD_NEED_CHAR— минимальное количество букв в пароле;PSWD_NEED_DIGIT— минимальное количество цифр в пароле;PSWD_NEED_DIFF_CASE— требование использования различных регистров букв в пароле;PSWD_MIN_LEN— минимальная длина пароля;PSWD_VALID_DAYS— срок действия пароля;PSWD_UNIQUE_COUNT— количество последних не повторяющихся паролей;
CREATE POLICY PasswordPolicy AS PSWD_NEED_CHAR=7, PSWD_NEED_DIGIT=5, PSWD_MIN_LEN=12, PSWD_NEED_DIFF_CASE=true, PSWD_VALID_DAYS=30, PSWD_UNIQUE_COUNT=3;
Будет создана политика которая, запретит использование паролей длиною менее 12 символов, где должно быть не менее 7 букв и 5 цифр. Должны использоваться буквы в разном регистре. Срок действия пароля 30 дней. 3 последних пароля не должны повторяться. Назначьте политику пользователю и смените ему пароль. Политика должна примениться.
Контролируйте активность пользователей
Для простых учетных записей пользователей вполне достаточно одной открытой сессии. Для учетный записи администратора
sysdbaэто значение может быть увеличено до 2.Компьютер, оставленный без присмотра пользователем, может быть использован злоумышленником. Задайте время бездействия пользователя, после которого сессия будет блокирована.
Администраторы могут владеть неактуальной информацией об используемых учетных записях. Полезно блокировать те учетные записи пользователей, которые не используются продолжительное время.
CREATE POLICY AccPolicy AS MAX_UNUSED_DAYS=45;
Будет создана политика которая, установит максимум одну сессию для пользователя, с длительностью бездействия в 10 минут, и 45 днями неиспользования учетной записью.
Контролируйте целостность ваших файлов
Контроль за файлами сервера означает, что для всех критически важных файлов сервера (бинарные файлы, файлы конфигурации, база данных безопасности
security5.fdbи т. д.) может быть вычислен и проверен хэш.Для генерации хэшей используется утилита
hashgen, входящая в комплект поставки СУБД. Пример использования утилитыhashgen:hashgen generate -S 32801 ../firebird.conf > hash.sign
Этой командой сгенерирована и сохранена в файл
hash.signконтрольная суммаfirebird.conf.Для того, чтобы включить контроль целостности файлов сервера, необходимо указать имя файла, содержащего контрольные суммы (хэши) защищаемых файлов сервера в конфигурационном файле
firebird.conf. Имя этого файла задается параметромHashesFile:HashesFile = hash.sign
Если задано значение этого параметра, то каждый раз при запуске сервера и регулярно в процессе работы СУБД в соответствии со значением параметра
IntegrityCheckIntervalфайла конфигурацииfirebird.conf, происходит проверка целостности файлов сервера.IntegrityCheckInterval = 10
Раз в 10 секунд сервер будет проверять БД
security5.fdb. Если хэши при проверке не совпадут, то СУБД попытается прекратить работу безопасными средствами. Количество попыток безопасного прекращения работы задается параметромIntegrityShutdownAttempts:IntegrityShutdownAttempts = 2
Обезличивайте память
Параметр
MemoryWipePassesфайла конфигурацииfirebird.confиспользуется для настройки необходимости и метода обезличивания освобождаемой сервером оперативной памяти и дискового пространства. Значение по умолчанию равно 0, это означает, что обезличивание памяти отключено. Возможные значения:0 — обезличивание не происходит;
1 — происходит обнуление памяти;
>1 — происходит чередование записи
0xFFи0x00в освобождаемую память, последний проход при этом в любом случае заполняет блок нулями.
Для быстрой очистки памяти установите
MemoryWipePasses = 1.Включите аудит событий
Аудит событий реализован на основе плагина
FBTrace. Средства аудита позволяют серверу отслеживать и записывать в лог-файлы такие события: соединения и отсоединения от БД (создания и удаления БД), операции DML и DDL, выполнение хранимых процедур и т.д. Запись в лог для каждой конкретной БД начинает вестись с момента подключения к ней и до момента отсоединения от нее или ее удаления. Регистрируются события, завершившиеся как удачно, так и неудачно (с ошибкой).Сессию системного аудита запускает сам сервер. Это означает, что нет необходимости взаимодействия с пользователем. События, которые будут отслеживаться в этой сессии, задаются в конфигурационном файле и читаются при старте сессии.
Файл с шаблоном настроек
fbtrace.confнаходится в корневом каталоге и содержит список отслеживаемых событий и указывает размещение логов трассировки для каждого события. Это позволяет достаточно гибко настроить параметры аудита различных событий для любой базы данных, при этом логирование будет осуществляться в отдельные файлы.По умолчанию аудит выключен. Для включения аудита необходимо изменить в конфигурационном файле
fbtrace.confпараметрenabled. Файл конфигурации перечитывается для каждого подключения.Используйте шифрование
В СУБД РЕД База Данных существует возможность зашифровать данные хранимые в базе данных. Не весь файл базы данных шифруется: только страницы данных, индексов и blob.
Чтобы сделать шифрование базы данных возможным, необходим плагин шифрования базы данных. РЕД База Данных не предоставляет такой плагин; его можно написать самому или получить у сторонних разработчиков. Существует возможность только его подключить и воспользоваться им.
Затем Вы можете зашифровать свою базу данных с помощью следующей команды:
ALTER DATABASE ENCRYPT WITH <имя плагина> [KEY <имя ключа шифрования>]
Также в СУБД РЕД База Данных есть защита канала передачи данных. Параметр
WireCryptустанавливает, следует ли шифровать сетевое соединение. Он может принимать три возможных значения:Required, Enabled, Disabled. По-умолчанию установлено, что шифрование является обязательным (Required) для подключений, поступающих на сервер и включенным (Enabled) для подключений, исходящих с сервера.Изучите документацию
Мы создали подробную документацию ( RedDatabaseDocs). В ней описаны все необходимые моменты по правильному использованию СУБД РЕД База Данных. Прочитайте её, задайте нам вопросы (rdb@red-soft.ru) и начните использовать СУБД прямо сейчас.