Неактивное шифрование предотвращает доступ злоумышленника к зашифрованным данным, хранящимся на диске, даже если у него есть доступ к системе. Базы данных с открытым исходным кодом MySQL и MariaDB теперь поддерживают функцию шифрования в состоянии покоя, которая отвечает требованиям нового законодательства ЕС о защите данных. Шифрование MySQL в состоянии покоя немного отличается от MariaDB, поскольку MySQL обеспечивает шифрование только для таблиц InnoDB. В то время как MariaDB также предоставляет возможность шифровать файлы, такие как журналы повторного выполнения, журналы медленных операций, журналы аудита, журналы ошибок и т. д. Однако оба они не могут зашифровать данные в ОЗУ и защитить их от вредоносного корня.
В этой статье мы научимся настраивать шифрование на уровне базы данных для MariaDB.
Для шифрования данных в состоянии покоя требуется плагин шифрования вместе с управлением ключами. Плагин шифрования отвечает за управление ключом шифрования, а также за шифрование/дешифрование данных.
MariaDB предоставляет три решения для управления ключами шифрования, поэтому то, как ваши базы данных управляют ключом шифрования, зависит от используемого вами решения. В этом руководстве будет продемонстрировано шифрование на уровне базы данных с помощью решения MariaDB File Key Management. Однако этот плагин не поддерживает функцию ротации ключей.
Если вы используете сервер LAMP, файлы для добавления этого плагина находятся в каталоге «/opt/lamp». В противном случае изменения вносятся в папку «/etc/mysql/conf.d».
Перед шифрованием базы данных с помощью плагина управления ключами файлов нам необходимо создать файлы, содержащие ключи шифрования. Мы создадим файл с двумя частями информации. Это ключ шифрования в шестнадцатеричном формате вместе с 32-битным идентификатором ключа.
Мы создадим новую папку «keys» в каталоге « /etc/mysql/» и воспользуемся утилитой OpenSSL для случайной генерации трех шестнадцатеричных строк и перенаправления вывода в новый файл в папке ключей. Введите следующие команды:
ubuntu@ubuntu:~$ sudo mkdir /etc/mysql/keys ubuntu@ubuntu:~$ echo -n "1;"$openssl rand hex 32 > /etc/mysql/keys/enc_keys" ubuntu@ubuntu:~$ echo -n "2;"$openssl rand hex 32 > /etc/mysql/keys/enc_keys" ubuntu@ubuntu:~$ echo -n "3;"$openssl rand hex 32 > /etc/mysql/keys/enc_keys"
Где 1,2,3 — ключевые идентификаторы; мы включаем их, чтобы создать ссылку на ключи шифрования, используя переменную innodb_default_encryption_key_id в MariaDB. Выходной файл будет выглядеть так:
1;01495ba35e1c9602e14e40bd6de41bb8 2;3cffa4a5d288e90108394dbf639664f8 3;9953297ed1a58ae837486318840f5f1d
Мы можем легко установить системную переменную file_key_management_filename с соответствующим путем внутри плагина File Key Management. Но оставлять ключи в виде обычного текста небезопасно. Мы можем до некоторой степени снизить риск, назначив права доступа к файлам, но этого недостаточно.
Теперь мы зашифруем ранее созданные ключи, используя случайно сгенерированный пароль. Напротив, размер ключа может варьироваться от 128/192/256 бит.
ubuntu@ubuntu:~$ openssl rand -hex 192> /etc/mysql/keys/enc_paswd.key
Поэтому мы будем использовать OpenSSL ENC команду в терминале для шифрования enc_key.txt файл enc_key.enc, с помощью ключа шифрования , созданного выше. Кроме того, MariaDB поддерживает только режим CBC AES для шифрования ключей шифрования.
ubuntu@ubuntu:~$ openssl enc -aes-256-cbc -md sha1 -pass file:/etc/mysql/keys/enc_paswd.key -in /etc/mysql/keys/enc_key.txt -out /etc/mysql/keys/enc_key.enc && sudo rm /etc/mysql/keys/enc_key.txt
Мы также удаляем наш файл enc_keys.txt, поскольку он больше не нужен. Кроме того, мы всегда можем расшифровать наши данные в MariaDB, если наш файл паролей в безопасности.
Теперь мы настроим MariaDB с помощью плагина File Key Management, добавив следующие переменные в файл конфигурации. Файлы конфигурации обычно находятся в ‘/etc/mysql’ и по умолчанию читают все файлы .cnf. Или вы можете создать новый файл конфигурации «mariadb_enc.cnf» в каталоге /etc/mysql/conf.d/.
Теперь ваш файл конфигурации может выглядеть совершенно иначе. Однако добавьте эти переменные шифрования в [sqld]. Если ключ зашифрован, плагину требуется настроить две системные переменные, то есть file_key_management_filename и file_key_management_filekey.
[sqld] #File Key Management Plugin plugin_load_add=file_key_management file_key_management = ON file_key_management_encryption_algorithm=aes_cbc file_key_management_filename = /etc/mysql/keys/enc_keys.enc file_key_management_filekey = /etc/mysql/keys/enc_paswd.key # InnoDB/XtraDB Encryption Setup innodb_default_encryption_key_id = 1 innodb_encrypt_tables = ON innodb_encrypt_log = ON innodb_encryption_threads = 4 # Aria Encryption Setup aria_encrypt_tables = ON # Temp & Log Encryption encrypt-tmp-disk-tables = 1 encrypt-tmp-files = 1 encrypt_binlog = ON
Вы можете найти подробную информацию о каждой системной переменной на официальном сайте MariaDB.
Мы изменим права доступа к каталогу MySQL, чтобы защитить пароль и другие конфиденциальные файлы. Право собственности на MariaDB будет изменено на текущего пользователя, которым в Ubuntu является mysql.
sudo chown -R mysql:root /etc/mysql/keys sudo chmod 500 /etc/mysql/keys/
Теперь мы изменим пароль и права доступа к зашифрованным файлам на
sudo chown mysql:root /etc/mysql/keys/enc_paswd.key /etc/mysql/keys/enc_key.enc sudo chmod 600 /etc/mysql/keys/enc_paswd.key /etc/mysql/keys/enc_key.enc
Теперь перезапустите службу базы данных.
sudo service mysql restart
В этой статье мы узнали, как шифрование на уровне базы данных является актуальной задачей и как мы можем настроить шифрование в состоянии покоя в MariaDB. Единственным недостатком плагина File Key Management является то, что он не поддерживает ротацию ключей. Однако, помимо этого подключаемого модуля, существует множество других решений для шифрования управления ключами, например подключаемый модуль AWS Key Management и подключаемый модуль Eperi Key Management. Вы можете найти более подробную информацию об этих плагинах на официальном сайте MariaDB.