web-dev-qa-db-ja.com

SELinuxがApacheに干渉している/ PHP

CentOS 7のインストールでは、SELinuxはデフォルトで有効になっています。これにより、Apacheが標準の/ var/www/htmlドキュメントルート内のPHPファイルを正しく読み取ることができなくなります(PHPスクリプトを含むWebページを表示する場合、ブラウザは空白です) )SELinuxを無効にすると、ページは正常に表示されます。

ApacheがドキュメントルートからPHPファイルにアクセスできるようにSELinuxを設定する方法はありますか?CentOSが望ましいセキュリティの追加であると明確に信じているので、SELinuxを完全に無効にしたくありません。

1
Grant_Bailey

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と通信させる 役立つかもしれません

3
bhavicp

audit2allow < /var/log/audit/audit.logを実行すると、httpdがSELinuxによってブロックされていることが確認されました( このリンク を参照)。解決策は、次の手順を使用してポリシーモジュールを作成して適用することでした。

  1. Rootとして、コマンドaudit2allow -a -M my_httpdを実行します(「my_httpd」を任意の名前に置き換えます)。
  2. 再びrootとして、コマンド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 };
1
Grant_Bailey