LINUX.ORG.RU
решено ФорумAdmin

mysql datadir + selinux


0

2

Centos 5.6, / mysql-5.0.77-4.el5_6.6

При изменении дефолтного datadir MySQL не стартует изза SElinux.
Было сделанно следуещее, что собсно, не помогло:

semanage fcontext -a -t var_t «/media/data/mysql(/.*)?»
restorecon -R -v /media/data/mysql
matchpathcon /media/data/mysql

ls -alZ /media/data/mysql
-rw-rw---- mysql mysql system_u:object_r:var_t ibdata1
-rw-rw---- mysql mysql system_u:object_r:var_t ib_logfile0
-rw-rw---- mysql mysql system_u:object_r:var_t ib_logfile1
drwxr-xr-x mysql mysql system_u:object_r:var_t mysql

Лог:
110831 11:28:03 mysqld started
110831 11:28:04 [Warning] Can't create test file /media/data/mysql/LPA-SrvWeb.lower-test
110831 11:28:04 [Warning] Can't create test file /media/data/mysql/LPA-SrvWeb.lower-test
/usr/libexec/mysqld: Can't change dir to '/media/data/mysql/' (Errcode: 13)
110831 11:28:04 [ERROR] Aborting


Что с ним еще можно сделать?

★★★
Ответ на: комментарий от Pinkbyte

данные пункты - мое личное ИМХО, после которых я завязал с SELinux наглухо и перешел на grsec там где надо...

Pinkbyte ★★★★★
()

можно попробовать удалить неправильный контекст:

semanage fcontext -d "/media/data/mysql(/.*)?"
и поставить правильный mysqld_db_t :
semanage fcontext -a -t mysqld_db_t "/media/data/mysql(/.*)?"
вдруг заведется

у меня на рахате5 стандартный путь маркирован так:

ll -dZ /var/lib/mysql
drwxr-xr-x  mysql mysql system_u:object_r:mysqld_db_t    /var/lib/mysql
т.е. совсем не var_t

fjoe
()
Ответ на: комментарий от fjoe

не завелось.

кстати datadir указывает на папку на другом харде.

с mysqld_db_t я тоже пробовала. эффект тот же.

drwxr-xr-x mysql mysql system_u:object_r:mysqld_db_t /media/data/mysql/

Murg ★★★
() автор топика
Ответ на: комментарий от fjoe

что то вроде этого:

type=AVC msg=audit(1314817374.095:470): avc: denied { search } for pid=1186 comm=«mysqld» name=«media» dev=dm-0 ino=10780673 scontext=root:system_r:mysqld_t:s0 tcontext=system_u:object_r:mnt_t:s0 tclass=dir

type=SYSCALL msg=audit(1314817374.095:470): arch=c000003e syscall=2 success=yes exit=28 a0=40186a20 a1=0 a2=0 a3=0 items=0 ppid=1130 pid=1186 auid=0 uid=27 gid=27 euid=27 suid=27 fsuid=27 egid=27 sgid=27 fsgid=27 tty=pts5 ses=29 comm=«mysqld» exe=«/usr/libexec/mysqld» subj=root:system_r:mysqld_t:s0 key=(null)

Murg ★★★
() автор топика
Ответ на: комментарий от Murg

у /media установлено system_u:object_r:mnt_t, a myqsl не может в mnt_t. нужно system_u:object_r:mysqld_db_t для media как и для data. т.е.

semanage fcontext -a -t mysqld_db_t "/media/(/.*)?"
но я бы вместо этого сделал отдельное правило вот так:
audit2allow -M mysqlmnt <<< 'type=AVC msg=audit(1314817374.095:470): avc: denied { search } for pid=1186 comm="mysqld" name="media" dev=dm-0 ino=10780673 scontext=root:system_r:mysqld_t:s0 tcontext=system_u:object_r:mnt_t:s0 tclass=dir'
и загрузил его
semodule -i mysqlmnt.pp

fjoe
()
Ответ на: комментарий от Pinkbyte

верно. есть еще и 3-й вариант - исключить mysql из selinux не выключая selinux полность.

setsebool -P mysqld_disable_trans 1
не проверял

fjoe
()
Ответ на: комментарий от fjoe

замечание:

In even more detail: the boolean disables the transition from the initrc_t domain to the mysqld_t domain at the time mysqld is started by the init daemon during boot, or the transition from unconfined_t to mysqld_t if it is started manually after boot. So mysqld is not running outside of SELinux at all, but in a domain that has much less restrictions than mysqld_t has.

при установке этого флага mysql будет запускаться в другом домене с меньшими ограничениями.

fjoe
()
Ответ на: комментарий от fjoe

Eсли на /media поставить system_u:object_r:mysqld_db_t, то уже апач не запускается с mysql за компанию, что конечно же, логично.

setsebool -P mysqld_disable_trans 1 помогло.

So mysqld is not running outside of SELinux at all, but in a domain that has much less restrictions than mysqld_t has.

Уже не волнует.

Спасибо за помошь.

Murg ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.