Security-Enhanced Linux с MariaDB
Security-Enhanced Linux (SELinux) — это модуль ядра Linux, предоставляющий основу для настройки системы обязательного контроля доступа (MAC) для многих ресурсов системы. Он включён по умолчанию в некоторых дистрибутивах Linux, включая RHEL, CentOS, Fedora и другие аналогичные дистрибутивы Linux. SELinux предотвращает доступ программам к файлам, каталогам или портам, если доступ к этим ресурсам не настроен.
Проверка включения SELinux
Для проверки включения SELinux выполните команду getenforce. Например:
getenforce
Временное переключение mysqld в разрешительный режим
При устранении проблем, которые, по вашему мнению, вызваны SELinux, может помочь временное переключение mysqld_t в разрешительный режим. Это можно сделать, выполнив команду semanage. Например:
sudo semanage permissive -a mysqld_t
Если эта операция решила проблему, это означает, что виновна текущая политика SELinux. Вам необходимо настроить политику или метки SELinux для MariaDB.
Настройка политики SELinux для сервера MariaDB
Сервер MariaDB должен работать с политикой вашего дистрибутива по умолчанию (обычно она входит в пакет системы selinux-policy или selinux-policy-targeted). Если вы используете mysqld_safe, вам потребуется дополнительный файл политики mariadb.pp, который устанавливается вместе с сервером MariaDB. Он будет загружаться автоматически, если у вас установлен /usr/sbin/semodule, но вы можете загрузить его вручную в любой момент с помощью
/usr/sbin/semodule -i /usr/share/mysql/policy/selinux/mariadb.pp
Обратите внимание, что этот файл политики дополняет, но не заменяет системную политику.
Установка контекстов файлов
SELinux использует контексты файлов для определения, кто должен иметь доступ к этому файлу.
Контексты файлов управляются командами semanage fcontext и restorecon.
Во многих системах утилита semanage устанавливается пакетом policycoreutils-python, а утилита restorecon устанавливается пакетом policycoreutils. Вы можете установить их с помощью следующей команды:
sudo yum install policycoreutils policycoreutils-python
Текущий контекст файла или каталога можно проверить, выполнив ls с опциями --context или --scontext.
Установка контекста файла для каталога данных
Если вы используете пользовательский каталог для datadir, вам может потребоваться установить контекст файла для этого каталога. Контекст файла SELinux для файлов данных MariaDB — mysqld_db_t. Вы можете определить, присутствует ли этот контекст в вашей системе и с какими файлами или каталогами он связан, выполнив следующую команду:
sudo semanage fcontext --list | grep mysqld_db_t
Если вы хотите установить контекст файла для своего пользовательского каталога для ваших datadir, это можно сделать, выполнив команды semanage fcontext и restorecon. Например:
sudo semanage fcontext -a -t mysqld_db_t "/mariadb/data(/.*)?" sudo restorecon -Rv /mariadb/data
Если вы хотите проверить текущий контекст файла, вы можете сделать это, выполнив ls с опциями --context или --scontext. Например:
ls --directory --scontext /mariadb/data
Установка контекста файла для файлов журналов
Если вы используете пользовательский каталог для файлов журналов, вам может потребоваться установить контекст файла для этого каталога. Контекст файла SELinux для файлов журналов MariaDB — mysqld_log_t. Вы можете определить, присутствует ли этот контекст в вашей системе и с какими файлами или каталогами он связан, выполнив следующую команду:
sudo semanage fcontext --list | grep mysqld_log_t
Если вы хотите установить контекст файла для вашего пользовательского каталога для файлов журналов, это можно сделать, выполнив команды semanage fcontext и restorecon. Например:
sudo semanage fcontext -a -t mysqld_log_t "/var/log/mysql(/.*)?" sudo restorecon -Rv /var/log/mysql
Если вы хотите проверить текущий контекст файла, вы можете сделать это, выполнив ls с опциями --context или --scontext. Например:
ls --directory --scontext /var/log/mysql
Установка контекста файла для файлов параметров
Если вы используете пользовательский каталог для файлов параметров, вам может потребоваться установить контекст файла для этого каталога. Контекст файла SELinux для файлов параметров MariaDB — mysqld_etc_t. Вы можете определить, присутствует ли этот контекст в вашей системе и с какими файлами или каталогами он связан, выполнив следующую команду:
sudo semanage fcontext --list | grep mysqld_etc_t
Если вы хотите установить контекст файла для вашего пользовательского каталога для файлов параметров, это можно сделать, выполнив команды semanage fcontext и restorecon. Например:
sudo semanage fcontext -a -t mysqld_etc_t "/etc/mariadb(/.*)?" sudo restorecon -Rv /etc/mariadb
Если вы хотите проверить текущий контекст файла, вы можете сделать это, выполнив ls с опциями --context или --scontext. Например:
ls --directory --scontext /etc/mariadb
Разрешение доступа к контексту файла tmpfs
Если вы хотите смонтировать свой tmpdir на файловой системе tmpfs или хотите использовать файловую систему tmpfs на /run/shm, вам может потребоваться разрешить mysqld_t доступ к нескольким контекстам файлов tmpfs. Например:
cd /usr/share/mysql/policy/selinux/
tee ./mysqld_tmpfs.te <<EOF
module mysqld_tmpfs 1.0;
require {
type tmpfs_t;
type mysqld_t;
class dir { write search read remove_name open getattr add_name };
class file { write getattr read lock create unlink open };
}
allow mysqld_t tmpfs_t:dir { write search read remove_name open getattr add_name };
allow mysqld_t tmpfs_t:file { write getattr read lock create unlink open }
EOF
sudo checkmodule -M -m mysqld_tmpfs.te -o mysqld_tmpfs.mod
sudo semodule_package -m mysqld_tmpfs.mod -o mysqld_tmpfs.pp
sudo semodule -i mysqld_tmpfs.pp
Устранение проблем с SELinux
Вам может потребоваться устранить проблемы, связанные с SELinux, в таких случаях:
- MariaDB использует нестандартный порт.
- MariaDB читает или записывает в некоторые файлы (каталог данных, файлы журналов, файлы параметров и т.д.) в нестандартных путях.
- MariaDB использует плагин, требующий доступа к ресурсам, которые не используются в стандартных установках.
Ошибки разрешений файловой системы
Если права доступа файловой системы для некоторого каталога MariaDB выглядят нормально, но в журнале ошибок MariaDB всё ещё есть ошибки, похожие на следующие:
130321 11:50:51 mysqld_safe Starting mysqld daemon with databases from /datadir
...
2013-03-21 11:50:52 2119 [Warning] Can't create test file /datadir/
2013-03-21 11:50:52 2119 [Warning] Can't create test file /datadir/
...
2013-03-21 11:50:52 2119 [ERROR] /usr/sbin/mysqld: Can't create/write to file
'/datadir/boxy.pid' (Errcode: 13 - Permission denied)
2013-03-21 11:50:52 2119 [ERROR] Can't start server: can't create PID file:
Permission denied
130321 11:50:52 mysqld_safe mysqld from pid file /datadir/boxy.pid ended
Затем проверьте раздел /var/log/audit/audit.log SELinux на наличие записей, похожих на следующие:
type=AVC msg=audit(1363866652.030:24): avc: denied { write } for pid=2119
comm="mysqld" name="datadir" dev=dm-0 ino=394
scontext=unconfined_u:system_r:mysqld_t:s0
tcontext=unconfined_u:object_r:default_t:s0 tclass=dir
Если вы видите какие-либо записи, похожие на это, то вам, скорее всего, нужно скорректировать контексты файлов для некоторых файлов или каталогов. Для получения дополнительной информации о том, как это сделать, см. Установка контекстов файлов.
SELinux и MariaDB на другом порту
Порты TCP и UDP разрешены для привязки. Если вы используете другой порт или какие-либо порты Galera, настройте SELinux для использования этих портов:
sudo semanage port -a -t mysqld_port_t -p tcp 3307
Генерация политик SELinux с помощью audit2allow
В некоторых случаях системе MariaDB могут потребоваться нестандартные политики. Эти политики можно создать из журнала аудита SELinux с помощью утилиты audit2allow. Также понадобятся утилиты semanage и semodule.
Во многих системах утилиты audit2allow и semanage устанавливаются пакетом policycoreutils-python, а утилита semodule устанавливается пакетом policycoreutils. Вы можете установить их с помощью следующей команды:
sudo yum install policycoreutils policycoreutils-python
Следующий процесс можно использовать для генерации политики из журнала аудита:
- Удалить dontaudits из политики:
sudo semodule -DB
- Временно переключить
mysqld_tв разрешительный режим. Например:
sudo semanage permissive -a mysqld_t
- Выполнить все действия, которые вызывали ошибки SELinux.
- Используйте сгенерированный журнал аудита для создания политики:
sudo grep mysqld /var/log/audit/audit.log | audit2allow -M mariadb_local sudo semodule -i mariadb_local.pp
- Выключить
mysqld_tиз разрешительного режима. Например:
sudo semanage permissive -d mysqld_t
- Восстановить dontaudits для политики:
sudo setmodule -B
Такая же процедура может быть использована, если MariaDB запускается, но SELinux препятствует её корректной работе. Например, SELinux может препятствовать аутентификации пользователей с помощью плагина PAM. Решение то же — включить аудит, переключиться в разрешительный режим, выполнить все действия, которые SELinux не позволил вам выполнить, создать политику из журнала аудита.
При обнаружении необходимых разрешений SELinux, пожалуйста, сообщите о необходимых разрешениях в системе отслеживания ошибок операционной системы, чтобы все пользователи могли воспользоваться вашей работой (например, Red Hat Bugzilla https://bugzilla.redhat.com/).
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/selinux/