Перейти к содержанию

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


Последнее обновление: 2024-04-30