在RHEL5上,我有一个小型的MySQL数据库,它必须写入临时文件。 为了加速这个过程,我想通过把下面一行放到my.cnf中来把临时目录移动到/ dev / shm:
tmpdir=/dev/shm/mysqltmp
我可以创build/ 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以前使用的那样?
closuresSELinux,我该如何做这个工作? 我需要编辑SELinux策略文件吗?
SELinux is preventing mysqld (mysqld_t) "getattr" to /dev/shm (tmpfs_t).
这意味着,SELinux拒绝访问/dev/shm目录,它是/dev/shm/mysqltmp的父/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/shmtypes标签从tmpfs_t为tmp_t
2)在permissive模式下运行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
制作你自己的tmpfs,并用你需要的标签来标记它: http : //www.thegeekstuff.com/2008/11/overview-of-ramfs-and-tmpfs-on-linux/ / dev / shm被glibc用于POSIX共享内存,所以我会build议不要使用它。