Spec-Zone.ru › MariaDB

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
  • Запустить MariaDB.
  • Выполнить все действия, которые вызывали ошибки 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/).

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/selinux/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API