CentOS 7のインストールでは、SELinuxはデフォルトで有効になっています。これにより、Apacheが標準の/ var/www/htmlドキュメントルート内のPHPファイルを正しく読み取ることができなくなります(PHPスクリプトを含むWebページを表示する場合、ブラウザは空白です) )SELinuxを無効にすると、ページは正常に表示されます。
ApacheがドキュメントルートからPHPファイルにアクセスできるようにSELinuxを設定する方法はありますか?CentOSが望ましいセキュリティの追加であると明確に信じているので、SELinuxを完全に無効にしたくありません。
SELinuxはあまりしませんが、試すことができます
semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?'
restorecon -R -v /var/www/html/
これにより、ApacheはそのディレクトリでPHPスクリプトを実行でき、再起動後も存続します。
MySQLを使用している場合は、同じことを行う必要があるかもしれません。 SELinux:ApacheにCentOS上のMySQLと通信させる 役立つかもしれません
audit2allow < /var/log/audit/audit.log
を実行すると、httpdがSELinuxによってブロックされていることが確認されました( このリンク を参照)。解決策は、次の手順を使用してポリシーモジュールを作成して適用することでした。
audit2allow -a -M my_httpd
を実行します(「my_httpd」を任意の名前に置き換えます)。semodule -i my_httpd.pp
を実行してモジュールをインストールします。これらの手順を実行した後、Apacheはサーバー上でPHPスクリプトを問題なく実行できました。サーバーを再起動しても、変更は破棄されません。
モジュールファイル(my_httpd.te)の内容:
module my_httpd 1.0;
require {
type admin_home_t;
type httpd_t;
class file { read getattr open };
}
#============= httpd_t ==============
allow httpd_t admin_home_t:file { read getattr open };