Конфигурация 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