/ 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
ありがとう。
この質問は少し古いですが、正しい答えの質問は見当たりません。
そのため、セントスAMIを使用してmysqlを実行するAWSとEFSでこの問題が発生しました。
ここで発生する問題は2つあります。通常のmysqlファイルに関する権限と、mysqlソケットとそのロックファイルに関する権限。
通常のmysqlファイルと同様に、mysqlソケットはmysqld_var_run_tのコンテキストで作成され、ロックファイルはmysqld_db_tのコンテキストで作成されているようです。
現在、NFSマウントには通常nsf_tのコンテキストが与えられています。
Nfsマウントは、マウントされているときにのみコンテキストを持つことができるようです。したがって、nfsを介してマウントするときに、私がしなければならなかったことは次のとおりです。
したがって、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共有にデータを保存するようになりました。
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コマンドを使用してインストールしてください。
「open」エラーは、「mysql.sock」が見つからない可能性があることを示しています。システム上の場所へのフルパスに名前を調整してみましたか?
fyi-httpdであるが、MySQLのmy.cnfとphp.iniの「socket」の下で定義したname = '/ tmp /mysql.sock'に「write」である同様のエラーをグーグルで検索したときに問題が見つかったためにのみ提案します。