PHPでmkdirを呼んだらSELinuxに阻まれた

CentOS7 & Apache & PHP でWebサーバーを作っているわけですが、設定でいくらかトラブったのでメモです。PHPから、mkdirなどを行おうとしたのですが、失敗しました。インターネットで調べてみると、パーミッションを設定しろ!と言った回答が多かったのですが、私の場合は、SELinuxのコンテキストが原因だったようです。

コンテキストの追加方法

どうやら、ファイルやフォルダにコンテキストを追加するには以下をインストールする必要がありそうです。

私の場合は、初めから入っていました。インストールが終わったら、segmanageコマンドでコンテキストを追加します。

mkdir等を行えるようにするには「httpd_sys_rw_content_t」

さて、mkdirを行えるようにするには、対象のディレクトリに「httpd_sys_rw_content_t」というコンテキストを追加する必要があるようです。例えば、「/home/test」というフォルダに追加できるようにするためには、

といった具合です。「restorecon」を呼ばないと、反映されません。

その他、Apacheで関連するコンテキストは?

それ以外にも、コンテキストが原因で失敗することがいくらかありました。以下のようなコンテキストが必要になるようです。

  • ドキュメントルート : httpd_sys_content_t
  • SSLの証明書ファイル : httpd_config_t

失敗した場合は、試してみると良いかもしれません。