Moodle サーバの SELinux を有効にしてみました。
ちなみに、moodledata を AWS の EFS に置いています。パスは、/mnt/nfs/html/moodledata です。
Moodle の web 画面が以下となります。
Fatal error: $CFG->dataroot is not writable, admin has to fix directory permissions! Exiting.
次のコマンドを実行した。
現在の boolean を確認した。
# getsebool -a | grep nfs | grep httpd
httpd_use_nfs --> off
httpd が nfs をつかえるようにした。
# setsebool -P httpd_use_nfs on
再起動すると、moodledata へのアクセスは解消されたようだが、データベースへのアクセスができないというエラーになっていた。
以下のコマンドを実行した。
# setsebool -P httpd_can_network_connect_db 1
(参考)
https://serverfault.com/questions/240015/how-do-i-allow-mysql-connections-through-selinux
webアクセスで確認したら、まだエラーが取れていない。audit.log を確認すると、以下のようになっていた。
# less /var/log/audit/audit.log | grep denied
type=AVC msg=audit(1590352121.329:94): avc: denied { name_connect } for pid=2318 comm="php-fpm" dest=3306 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:mysqld_port_t:s0 tclass=tcp_socket permissive=0
再起動して web アクセスすると、以下の表示になっていた。
Invalid permissions detected when trying to create a directory. Turn debugging on for further details.
audit.log を確認すると、以下のエラーになっていた。
type=AVC msg=audit(1590352587.167:90): avc: denied { write } for pid=2347 comm="php-fpm" name="localcachedir" dev="nvme0n1p1" ino=239410 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_sys_content_t:s0 tclass=dir permissive=0
次のコマンドを実行した。
# setsebool -P httpd_can_network_connect 1
エラーが出なくなった。
httpd_can_network_connect_db はいらなかったかな。
(参考情報)
nfs に dataroot が無い場合、要すれば、よくある構築の一例の場合の参考例です。
semanage コマンドが入っていない場合、file context は手動で設定できる。
(一例)
# vim /etc/selinux/targeted/contexts/files/file_contexts.local
/var/www/html/moodle(/.*)? system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html/moodledata(/.*)? system_u:object_r:httpd_sys_rw_content_t:s0
# restorecon -R -v /var/www/html/moodledata
再起動して確認した。
# ls -laZ /var/www/html/moodledata
以下のラベルがついて、エラーもなくなったようだ。
httpd_sys_rw_content_t
上記は、参考情報で、いつもの場合です。
今回は、moodledata のバスが /mnt/nfs/html/moodledata なので、boolean だけで設定できた。
結局、以下を実行した。
# setsebool -P httpd_can_network_connect 1
# setsebool -P httpd_use_nfs on
ちなみに、semanage は以下の方法でインストールできます。
# yum -y install policycoreutils-python