Конфигурация AppArmor¶
Редактирование профиля¶
Отредактируйте только /etc/apparmor.d/local/usr.sbin.mysql
.
Мы рекомендуем переключить профиль в режим Complain
перед редактированием файла. Отредактируйте файл в любом текстовом редакторе. Когда работа будет завершена, перезагрузите один профиль и переключите профиль в режим Enforce
.
Настройка нестандартного расположения пользовательского каталога данных¶
Вы можете изменить каталог данных на нестандартный, например /var/lib/mysqlcustom
. Вам следует включить режим аудита, чтобы фиксировать все действия, и отредактировать профиль, чтобы разрешить доступ к настраиваемому расположению.
$ cat /etc/mysql/mysql.conf.d/mysqld.cnf
Ожидаемый результат
The MyDB 8.4 configuration file.
For explanations see
https://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
*datadir = /var/lib/mysqlcustom*
log-error = /var/log/mysql/error.log
Включите режим аудита для mysqld
. В этом режиме применяется политика безопасности, и весь доступ протоколируется.
$ aa-audit mysqld
Перезапустите MyDB Сервер для MySQL:
$ sudo systemctl mysql restart
Если перезапуск не удался, значит AppArmor заблокировал доступ к каталогу пользовательских данных. Чтобы диагностировать проблему, проверьте журналы на наличие следующих ключевых слов:
-
ALLOWED
— событие журнала, когда профиль находится в режимеComplain
и действие нарушает политику. -
DENIED
— событие журнала, когда профиль находится в режимеEnforce
и действие заблокировано.
Например, следующие записи журнала показывают DENIED
:
Ожидаемый результат
...
Dec 07 12:17:08 ubuntu-s-4vcpu-8gb-nyc1-01-aa-ps audit[16013]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/var/lib/mysqlcustom/binlog.index" pid=16013 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=111 ouid=111
Dec 07 12:17:08 ubuntu-s-4vcpu-8gb-nyc1-01-aa-ps kernel: audit: type=1400 audit(1607343428.022:36): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/var/lib/mysqlcustom/mysqld_tmp_file_case_insensitive_test.lower-test" pid=16013 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=111 ouid=111
...
Откройте файл /etc/apparmor.d/local/usr.sbin.mysqld
в текстовом редакторе и отредактируйте следующие записи в разделе Allow data dir access
.
Allow data dir access
/var/lib/mysqlcustom/ r,
/var/lib/mysqlcustom/** rwk,
Закомментируйте, используя символ #
, текущие записи в разделе Allow data dir access section
. Этот шаг не является обязательным. Если вы пропустите этот шаг, mysqld продолжит обращаться к расположению каталога данных по умолчанию.
Примечание
Отредактируйте локальную версию файла вместо основного профиля. Разделение изменений упрощает обслуживание.
Перезагрузить профиль:
$ apparmor_parser -r -T /etc/apparmor.d/usr.sbin.mysqld
Перезапустите MySQL:
$ systemctl restart mysqld
Настройка нестандартного расположения журнала¶
Чтобы переместить журналы в произвольное расположение, вам необходимо отредактировать файл конфигурации my.cnf, а затем отредактировать локальный профиль, чтобы разрешить доступ:
cat /etc/mysql/mysql.conf.d/mysqld.cnf
Ожидаемый результат
The MyDB 8.0 configuration file.
For explanations see
https://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /*custom-log-dir*/mysql/error.log
Убедитесь, что пользовательский каталог существует.
$ ls -la /custom-log-dir/
Ожидаемый результат
total 12
drwxrwxrwx 3 root root 4096 Dec 7 13:09 .
drwxr-xr-x 24 root root 4096 Dec 7 13:07 ..
drwxrwxrwx 2 root root 4096 Dec 7 13:09 mysql
Перезапустите сервер MyDB.
$ service mysql start
Ожидаемый результат
Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xe" for details.
$ journalctl -xe
Ожидаемый результат
...
AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/custom-log-dir/mysql/error.log"
...
AppArmor запретил доступ. Отредактируйте локальный профиль в разделе Allow log file access
, чтобы разрешить доступ к нестандартному расположению журнала.
$ cat /etc/apparmor.d/local/usr.sbin.mysqld
Ожидаемый результат
Site-specific additions and overrides for usr.sbin.mysqld..
For more details, please see /etc/apparmor.d/local/README.
Allow log file access
/custom-log-dir/mysql/ r,
/custom-log-dir/mysql/** rw,
Перезагрузить профиль:
$ apparmor_parser -r -T /etc/apparmor.d/usr.sbin.mysqld
Перезапустите сервер MyDB:
$ systemctl restart mysqld
Установка расположения каталога secure_file_priv
¶
По умолчанию secure_file_priv
указывает на следующее местоположение:
mysql> mysqlshow variables like 'secure_file_priv';
Ожидаемый результат
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
Чтобы разрешить доступ к другому местоположению, в текстовом редакторе откройте локальный профиль. Проверьте настройки в разделе Allow data dir access
:
Allow data dir access
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
Отредактируйте локальный профиль в текстовом редакторе, чтобы разрешить доступ к произвольному расположению.
$ cat /etc/apparmor.d/local/usr.sbin.mysqld
Ожидаемый результат
Site-specific additions and overrides for usr.sbin.mysqld..
For more details, please see /etc/apparmor.d/local/README.
Allow data dir access
/var/lib/mysqlcustom/ r,
/var/lib/mysqlcustom/** rwk,
Перезагрузить профиль:
$ apparmor_parser -r -T /etc/apparmor.d/usr.sbin.mysqld
Перезапустите MyDB Сервер для MySQL:
$ systemctl restart mysqld
См. также:¶
AppArmor
Профили AppArmor
Управление профилями AppArmor
Отключение AppArmor
Устранение неполадок в AppArmor