MySQL tmpdir on / dev / shm com o SELinux

1

No RHEL5, eu tenho um pequeno banco de dados MySQL que tem que gravar arquivos temporários. Para acelerar este processo, eu gostaria de mover o diretório temporário para / dev / shm colocando a seguinte linha em my.cnf:

tmpdir=/dev/shm/mysqltmp

Eu posso criar / dev / shm / mysqltmp muito bem e fazer

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

Eu tentei fazer o SELinux feliz aplicando as mesmas configurações que estão em vigor para / tmp / (e / var / tmp /), que é presumivelmente onde o MySQL está gravando seus arquivos tmp se o tmpdir estiver indefinido.

O problema é que o SELinux reclama que o MySQL tem acesso a esse diretório. Eu recebo o seguinte em / var / log / messages:

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

SELinux é uma amante difícil. Detalhes:

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 mostra

drwxrwxr-x  mysql mysql system_u:object_r:tmp_t          mysqltmp

e permissões para / dev / shm em si são

drwxrwxrwt  root root  system_u:object_r:tmpfs_t        shm

Eu também tentei

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

e definindo o grupo em / dev / shm para o mysql sem melhores resultados. Não deveria ser o suficiente para dizer ao SELinux, hey, este é um diretório temporário como o MySQL estava usando antes?

Sem desligar o SELinux, como faço isso funcionar? Preciso editar os arquivos de políticas do SELinux?

    
por user21715 05.11.2009 / 17:27

2 respostas

2

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

Isso significa que o SELinux nega acesso a /dev/shm dir, que é pai de /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

Você tem 3 opções:

1) Altere o rótulo /dev/shm type de tmpfs_t para tmp_t

2) Execute o SELinux no modo permissivo e colete todas as negações em /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

Você deve verificar se myMySQL.te contém apenas as permissões necessárias. Finalmente, você carrega o módulo no kernel semodule -i myMySQL.pp

3) Desabilite a proteção do SELinux para o MySQL setsebool -P mysqld_disable_trans=on

    
por 16.11.2009 / 10:32
0

Crie seus próprios tmpfs e rotule-os com o que precisar: link / dev / shm é usado pelo glibc para memória compartilhada POSIX, então aconselho não usá-lo.

    
por 15.03.2011 / 16:06