Назад | Перейти на главную страницу

MySQL tmpdir на / dev / shm с SELinux

На RHEL5 у меня есть небольшая база данных MySQL, в которую нужно записывать временные файлы. Чтобы ускорить этот процесс, я хотел бы переместить временный каталог в / dev / shm, поместив следующую строку в my.cnf:

tmpdir=/dev/shm/mysqltmp

Я могу просто создать / dev / shm / mysqltmp и сделать

chown mysql:mysql /dev/shm/mysqltmp
chcon --reference /tmp/ /dev/shm/mysqltmp

Я попытался сделать SELinux счастливым, применив те же настройки, которые действуют для / tmp / (и / var / tmp /), где, предположительно, MySQL записывает свои файлы tmp, если tmpdir не определен.

Проблема в том, что SELinux жалуется, что MySQL имеет доступ к этому каталогу. Я получаю в / var / log / messages следующее:

SELinux is preventing mysqld (mysqld_t) "getattr" to /dev/shm (tmpfs_t).

SELinux - суровая хозяйка. Подробности:

Source Context                root:system_r:mysqld_t
Target Context                system_u:object_r:tmpfs_t
Target Objects                /dev/shm [ dir ]
Source                        mysqld
Source Path                   /usr/libexec/mysqld
Port                          <Unknown>
Host                          db.example.com
Source RPM Packages           mysql-server-5.0.77-3.el5
Target RPM Packages           
Policy RPM                    selinux-policy-2.4.6-255.el5_4.1
Selinux Enabled               True
Policy Type                   targeted
MLS Enabled                   True
Enforcing Mode                Enforcing
Plugin Name                   catchall_file
Host Name                     db.example.com
Platform                      Linux db.example.com 2.6.18-164.2.1.el5 #1 SMP
                              Mon Sep 21 04:37:42 EDT 2009 x86_64 x86_64
Alert Count                   46
First Seen                    Wed Nov  4 14:23:48 2009
Last Seen                     Thu Nov  5 09:46:00 2009
Local ID                      e746d880-18f6-43c1-b522-a8c0508a1775

ls -lZ / dev / shm показывает

drwxrwxr-x  mysql mysql system_u:object_r:tmp_t          mysqltmp

и разрешения для самого / dev / shm

drwxrwxrwt  root root  system_u:object_r:tmpfs_t        shm

Я также пробовал

chcon -R -t mysqld_t /dev/shm/mysqltmp

и установка группы на / dev / shm на mysql без лучших результатов. Разве не должно быть достаточно сказать SELinux, что это временный каталог, такой же, как MySQL использовал раньше?

Если не выключить SELinux, как мне это сделать? Нужно ли мне редактировать файлы политик SELinux?

SELinux is preventing mysqld (mysqld_t) "getattr" to /dev/shm (tmpfs_t).

Это означает, что SELinux запрещает доступ к /dev/shm dir, который является родительским для /dev/shm/mysqltmp.

ls -lZd /tmp/
drwxrwxrwt 3 system_u:object_r:tmp_t:s0
ls -lZd /dev/shm
drwxrwxrwt  root root system_u:object_r:tmpfs_t:s0

У вас есть 3 варианта:

1) Изменить /dev/shm Типовой ярлык из tmpfs_t к tmp_t

2) Запустите SELinux в разрешающем режиме и соберите все отклонения в /var/log/audit/audit.log

tail -n 0 -f /var/log/audit/audit.log | audit2allow -m myMySQL -o myMySQL.te
checkmodule -M -m myMySQL.te -o myMySQL.mod
semodule_package -m myMySQL.mod -o myMySQL.pp

Вы должны проверить, содержит ли myMySQL.te только необходимые разрешения. Наконец, вы загружаете модуль в ядро semodule -i myMySQL.pp

3) Отключить защиту SELinux для MySQL setsebool -P mysqld_disable_trans=on

Создайте свой собственный tmpfs и пометьте его тем, что вам нужно: http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/ / dev / shm используется glibc для разделяемой памяти POSIX, поэтому я бы посоветовал не использовать его.