以下のtest.php にブラウザーからアクセスすると、ログイン失敗になります。
setenforce 0 にすると、ログインできるようになります。
なので、SELinux の設定だと思うのですが、どのような設定をすればいいのでしょうか。
同じ設定をしている他のサーバーがあって、そちらはアクセスできています。
そこで、getsebool -a でお互いのサーバーの比較をしたところ
違いは、httpd_can_network_connect と httpd_can_network_connect_db が off/on の違いのみで後は同じでした。この違いは、アドバイスを頂き設定変更した部分で、ログインできるサーバーは、off、ログインできないサーバーは、on になっています。
ls -Z /dev/vda1 で、アクセスできるサーバーとできないサーバーを比較しましたが、全く同じでした。
アクセスできているサーバー | アクセスできないサーバー |
---|---|
brw-rw----. root disk system_u:object_r:fixed_disk_device_t:s0 /dev/vda1 | brw-rw----. root disk system_u:object_r:fixed_disk_device_t:s0 /dev/vda1 |
ls -Z /var/lib/mysql で、アクセスできるサーバーとできないサーバーを比較したら、結果が違いました。
アクセスできているサーバー | アクセスできないサーバー |
---|---|
lrwxrwxrwx. root root unconfined_u:object_r:var_lib_t:s0 /var/lib/mysql -> /mnt/data01/mariadb | lrwxrwxrwx. root root system_u:object_r:mysqld_db_t:s0 /var/lib/mysql -> /mnt/data01/mariadb |
上記、ユーザーとタイプがアクセスできているサーバーと違うので、以下、chcon をしてみたが、ユーザーとタイプは変更できなかった。
chcon -u unconfined_u -t var_lib_t /var/lib/mysql
restorecon -R /var/lib/mysql
【test.php】
<html> <head><title>php db access test</title></head> <body> <?php $link = mysqli_connect('localhost','user','pwd'); if (!$link) { die('ログイン失敗'.mysqli_error()); } print('<p>ログイン成功</p>'); $db_selected = mysqli_select_db($link,'sample_request'); if (!$db_selected){ die('データベース接続失敗'.mysqli_error()); } print('<p>データベース接続成功</p>'); $close_flag = mysqli_close($link); if ($close_flag){ print('<p>切断</p>'); } ?> </body> </html>【audit.log の denied】
type=AVC msg=audit(1541151350.065:175): avc: denied { read } for pid=1871 comm="httpd" name="mysql" dev="vda1" ino=159168 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_db_t:s0 tclass=lnk_file
【DB】
mariadb 5.5
【OS】
CentOS Linux release 7.5.1804 (Core)
回答2件
あなたの回答
tips
プレビュー