web-dev-qa-db-ja.com

selinuxを有効にして、mysqlファイルをnfs共有で読み書きできるようにします

/ var/lib/mysqlディレクトリをnfs共有に移動し、すべての構成ファイルを更新し、必要に応じてシンボリックリンクを作成しました。これは、selinuxをオフにすると機能しますが、selinuxをオンにするとmysqldを起動できません。私は解決策をグーグルで検索しましたが、うまくいくものは見つかりませんでした。簡単なものが欠けているのではないかと思います。

これが私が試したものです:

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

ここで間違ったコンテキストを使用しているのではないかと思いますが、正しいコンテキストが何であるかはわかりません。助言がありますか?

更新:

提案されているように/var/log/audit/audit.logを確認した後、次のエラーが表示されます。

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

これに対処するために私が何をする必要があるのか​​わからない。次のseboolsを有効にしました。

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

ありがとう。

2
user5013

この質問は少し古いですが、正しい答えの質問は見当たりません。

そのため、セントスAMIを使用してmysqlを実行するAWSとEFSでこの問題が発生しました。

ここで発生する問題は2つあります。通常のmysqlファイルに関する権限と、mysqlソケットとそのロックファイルに関する権限。

通常のmysqlファイルと同様に、mysqlソケットはmysqld_var_run_tのコンテキストで作成され、ロックファイルはmysqld_db_tのコンテキストで作成されているようです。

現在、NFSマウントには通常nsf_tのコンテキストが与えられています。

Nfsマウントは、マウントされているときにのみコンテキストを持つことができるようです。したがって、nfsを介してマウントするときに、私がしなければならなかったことは次のとおりです。

  1. nFS共有をmysqld_db_tコンテキストでマウントします。
  2. mysqlソケットをmysqld_db_tコンテキストを持つ別のディレクトリに移動します。

したがって、fstabマウントでは次のようになります。

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は次のようになります。

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

そのため、すべてのファイルの権限が正しく、mysqlはEFSNFS共有にデータを保存するようになりました。

1
JDL

Auditdに新しいログファイルを開始させます(kill -USR1 pidofauditd)次に、SELinuxをPermissiveモードにします(setenforce 0)そしてあなたが通常することをしなさい。これにより、適切な監査メッセージが生成されます。次に

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

semodule -i MyLocalPolicy.pp

MyLocalPolicy.teファイルをチェックして、ポリシーの機能を確認し、提供されているsemoduleコマンドを使用してインストールしてください。

0
user9517

「open」エラーは、「mysql.sock」が見つからない可能性があることを示しています。システム上の場所へのフルパスに名前を調整してみましたか?

fyi-httpdであるが、MySQLのmy.cnfとphp.iniの「socket」の下で定義したname = '/ tmp /mysql.sock'に「write」である同様のエラーをグーグルで検索したときに問題が見つかったためにのみ提案します。

0
Dogofob