Habilite o selinux para permitir que arquivos mysql sejam lidos e escritos em um compartilhamento nfs

2

Eu movi meu diretório / var / lib / mysql para um compartilhamento nfs, atualizei todos os arquivos de configuração e criei links simbólicos onde apropriado. Isso funciona quando o selinux está desativado, mas o mysqld não inicia quando o selinux está ativado. Eu pesquisei por uma solução, mas não encontrei nenhuma que funcionasse. Eu suspeito que estou sentindo falta de algo simples.

Aqui está o que eu tentei:

yum install policycoreutils-python
semanage fcontext -a -t mysqld_db_t "/nfs/data0/mysql(/.*)?"
restorecon -Rv /nfs/data0/mysql

Eu suspeito que eu esteja usando o contexto errado aqui, mas não tenho certeza qual seria o correto. Alguma sugestão?

ATUALIZAÇÃO:

Depois de seguir o /var/log/audit/audit.log, conforme sugerido, vejo os seguintes erros:

type=AVC msg=audit(1398346018.436:3455): avc:  denied  { write } for  pid=10980 
   comm="httpd" name="mysql.sock" dev=0:13 ino=18438 
   scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:nfs_t:s0 
   tclass=sock_file
type=AVC msg=audit(1398346018.439:3456): avc:  denied  { search } for  pid=12395 
   comm="mysqld" name="mysql" dev=0:13 ino=14805 
   scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0 
   tclass=dir
type=AVC msg=audit(1398346019.657:3457): avc:  denied  { open } for  pid=12395 
   comm="mysqld" name="cache_admin_menu.frm" dev=0:13 ino=23322 
   scontext=unconfined_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:nfs_t:s0 
   tclass=file

Não tenho certeza do que preciso fazer para resolver isso. Eu tenho os seguintes sebools habilitados:

mysql_connect_any
httpd_can_network_connect_db
httpd_can_network_connect
httpd_can_network_memcache
httpd_can_sendmail
httpd_use_nfs
httpd_builtin_scripting

Obrigado.

    
por user5013 24.04.2014 / 17:49

3 respostas

1

Esta pergunta é um pouco antiga, mas não veja uma com a resposta correta.

Então eu me deparei com esse problema com AWS e EFS usando um centos AMI para executar o mysql.

Existem dois problemas que ocorrem aqui. As permissões em torno dos arquivos mysql regulares e as permissões em torno do soquete mysql e seu arquivo de bloqueio.

Parece que o socket mysql é criado com um contexto de mysqld_var_run_t e o arquivo de lock com um contexto de mysqld_db_t como são os arquivos mysql regulares.

Agora, as montagens do NFS geralmente recebem um contexto de nsf_t.

Parece que uma montagem nfs só pode ter contexto se montada. Então, o que eu tive que fazer, ao montar via nfs, foi o seguinte:

  1. monte o compartilhamento NFS com o contexto mysqld_db_t.
  2. mova o socket mysql para um diretório diferente com o contexto mysqld_db_t.

Então, no fstab mount é assim:

nfs-share-url:/ /data nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noatime,context="system_u:object_r:mysqld_db_t:s0"  0 0

my.cnf tem esta aparência:

datadir=/data
socket=/var/lib/mysql-files/mysql.sock

Assim, as permissões estão corretas em todos os arquivos e o mysql agora armazena dados no compartilhamento EFS NFS.

    
por 05.10.2016 / 22:25
0

Eu faria com que o auditd iniciasse um novo arquivo de log ( kill -USR1 pidofauditd ), em seguida, fizesse o SELinux no modo Permissivo ( setenforce 0 ) e fizesse o que você normalmente faz. Isso gerará mensagens de auditoria adequadas. Então

cat audit.log | audit2allow -M myLocalPolicy 
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i MyLocalPolicy.pp

Verifique o arquivo MyLocalPolicy.te para ver o que a política está fazendo e, se estiver satisfeito, instale-o com o comando semodule fornecido.

    
por 24.04.2014 / 18:22
0

O erro "open" indica que pode não estar encontrando "mysql.sock". Você já tentou ajustar o nome para o caminho completo para onde ele está localizado no seu sistema?

fyi - Sugiro apenas que encontrei o seu problema ao pesquisar o erro semelhante que é httpd, mas que "escreva" em name = '/ tmp / mysql.sock' que defini em "socket" no my.cnf do MySQL e php.ini.

    
por 29.08.2016 / 20:28

Tags