Настройка компонента MySQL keyring

Вопрос или проблема

У меня такая же проблема, как описано пользователем nerdgeekdork здесь:

MySQL keyring component (not plugin) not loading on server startup

Я пытался настроить компонент так же, как описано в документации mySQL:

https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html

https://dev.mysql.com/doc/refman/8.0/en/keyring-component-installation.html

и

https://dev.mysql.com/doc/refman/8.0/en/keyring-file-component.html

В итоге, были настроены следующие параметры:

файл mysqld.my создан в /usr/sbin/ с root:mysql 0640

Этот файл содержит следующее:

{ "components": "file://component_keyring_file" } 

Затем в /usr/lib/mysql/plugin у меня есть файл component_keyring_file.cnf с root:mysql 0640, который содержит

{ "path": "/usr/local/mysql/keyring/component_keyring_file", "read_only": false } 

Наконец, в /usr/local/mysql/keyring/ находится файл component_keyring_file с root:mysql 0660.

После перезапуска mySQL и входа в командную строку mySQL как root, при выполнении команды SELECT * FROM performance_schema.keyring_component_status; я получаю пустое множество.

Вот версии Ubuntu и mySQL:

Ubuntu 20.04.4 LTS mysql Ver 8.0.30-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu)) 

Любая помощь будет оценена.

Это был AppArmor!

MySQL использовал профиль принудительного применения AppArmor, который не позволял MySQL вносить изменения в component_keyring_file, так как он не находился в месте по умолчанию “/var/lib/mysql-keyring/”, используемом профилем AppArmor для MySQL.

Сначала проблему удалось решить в рамках устранения неисправностей, изменив профиль MySQL в режим жалоб (sudo aa-complain /usr/sbin/mysqld). Окончательное решение состояло в обновлении профиля MySQL для использования указанного мной пути и загрузке его, например, с помощью команды cat /etc/apparmor.d/usr.sbin.mysqld | sudo apparmor_parser -a.

В моем случае apparmor блокировал файл манифеста в /usr/sbin/mysqld.my. Я добавил:

# Разрешить чтение файла манифеста keyring /usr/sbin/mysqld.my r, 

в конфигурационный файл профиля apparmor mysql в /etc/apparmor.d/usr.sbin.mysqld

Попробуйте отключить selinux.
setenforce 0

Ответ или решение

Конфигурация компонента MySQL Keyring может вызвать множество вопросов, особенно если она не загружается при запуске сервера. Это часто связано с ошибками в конфигурации, ограничениями на уровне операционной системы или проблемами с доступом к файлам. Рассмотрим основные аспекты настройки компонента MySQL Keyring, учитывая предоставленный вами контекст и выявленные проблемы.

Теоретическая часть (Theory):

MySQL Keyring — это компонент, который используется для управления шифровальными ключами на сервере MySQL. Он нужен, чтобы хранить и извлекать ключи в безопасном виде, что особенно важно для функций шифрования на уровне приложения, таких как шифрование данных в InnoDB. Компонент Keyring может хранить ключи в различных хранилищах, включая файловую систему. Чтобы использовать этот компонент, нужно обеспечить корректную настройку манифестов компонентов и конфигурационных файлов, а также уделить внимание вопросам безопасности, таким как разрешения и ограничения AppArmor или SELinux.

Практическая часть (Example):

Вы описали, что создали файл конфигурации /usr/sbin/mysqld.my с правильными правами доступа и настроили компонент Keyring в нем. Также были настроены файлы в /usr/lib/mysql/plugin и /usr/local/mysql/keyring/. Однако после перезапуска MySQL и выполнения запроса SELECT * FROM performance_schema.keyring_component_status; вы получили пустое множество результатов. Проблема заключалась в том, что AppArmor, система контроля доступа, блокировала доступ MySQL к файлам из-за их нестандартного расположения.

Поэтому вы обновили профиль MySQL в AppArmor, добавив разрешения на чтение необходимых файлов. Это решение позволило обойти ограничения AppArmor и заставить компонент работать корректно.

Применение решения (Application):

  1. Настройка прав: Убедитесь, что все файлы, связанные с компонентом Keyring, имеют правильные права доступа и владельца. Это предотвратит возможные проблемы с безопасностью и доступом.

  2. AppArmor и SELinux: Если на вашем сервере активен AppArmor, обновите его профиль, чтобы включить разрешения для всех новых путей, связанных с Keyring. Следующий фрагмент конфигурации AppArmor может помочь:

    # Allow keyring manifest read file
    /usr/sbin/mysqld.my r,

    Если используется SELinux, временно отключите его с помощью команды setenforce 0, чтобы проверить, не он ли является источником проблемы. Если это так, настройте правильные правила SELinux.

  3. Проверка конфигурации: Убедитесь, что все файлы конфигурации имеют правильный синтаксис JSON и расположены в ожидаемых MySQL местах. Проверьте сопутствующую документацию на сайте MySQL на предмет последних изменений или дополнительных требований.

  4. Логи: Внимательно изучите логи MySQL на предмет ошибок при запуске, связанных с Keyring. Это может дать более точную информацию о природе проблемы.

  5. Обновление системы: Убедитесь, что ваш дистрибутив Ubuntu и версия MySQL обновлены. Обновления безопасности и совместимости могут решить многие проблемы, связанные с компонентами и плагинами.

При грамотном подходе к настройке и устранении проблем с компонентом MySQL Keyring, вы сможете эффективно использовать его в ваших проектах. Главное — учитывать все особенности системы безопасности и конфигурации операционной среды.

Оцените материал
Добавить комментарий

Капча загружается...