web-dev-qa-db-ja.com

SELinuxを使用した/ dev / shm上のMySQLtmpdir

RHEL5には、一時ファイルを書き込まなければならない小さなMySQLデータベースがあります。このプロセスを高速化するために、my.cnfに次の行を追加して、一時ディレクトリを/ dev/shmに移動します。

tmpdir=/dev/shm/mysqltmp

/ dev/shm/mysqltmpを問題なく作成できます

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

/ tmp /(および/ var/tmp /)に有効な設定と同じ設定を適用して、SELinuxを満足させようとしました。これは、tmpdirが定義されていない場合にMySQLがtmpファイルを書き込んでいる場所と思われます。

問題は、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ポリシーファイルを編集する必要がありますか?

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

これは、SELinuxが/dev/shmの親である/dev/shm/mysqltmpdirへのアクセスを拒否することを意味します。

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)MySQLのSELinux保護を無効にするsetsebool -P mysqld_disable_trans=on

2
sumar

独自のtmpfsを作成し、必要なラベルを付けます。 http://www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/ /dev/shmはglibcによってPOSIX共有メモリに使用されるため、使用しないことをお勧めします。

0
AndreasM