CentOS7 + Apache2 で特定ディレクトリにデータを書き込もうとしてはまる
まとめ
SELinuxのせいです.
設定を変えるか無効にしてください.
(参考: http://www.hoge256.net/2014/10/1200.html )
mod_security を導入している方はそちらの設定も念のため見直されると良いと思います.
背景
とあるCMSを導入する際,
ふと思い立って普段はXAMPPなどで手軽に環境構築しているところを,
yumでApacheなどをそれぞれ入れて設定してみようとしたところ,
ディレクトリへのデータの書き込みができずはまる.
現象
ディレクトリのパーミッションは777にも関わらず,
CMSのインストーラーが「書き込み権限が割り当てられていない」と怒る.
phpで以下のようなスクリプトを組んでみても書き込みはできない
<?php
$fname = "dummy";
try{
$fp = fopen( $fname, "w" );
} catch (ErrorException $e) {
print($e);
}
if( $fp ){
echo __LINE__.": OK".PHP_EOL;
fputs($fp, date("Ymd H:i:s"));
fclose( $fp );
}
echo __LINE__.": OK".PHP_EOL;
以下のようなエラーが出てくる
Warning: fopen(dummy): failed to open stream: Permission denied in /var/www/html/sample.php on line 4
mod_security を入れていたのでこれが悪さをしているのかな?
と思って切ってみたりするが変化なし.
対策
こちらのサイト( http://www.hoge256.net/2014/10/1200.html )を参考に,
SELinuxの設定を見直す.
/var/www/html/tmp
に書き込みを許したいとして,
# semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/tmp(/.*)?"
# restorecon -R /var/www/html/tmp
のような設定を行う.
もしくは単純にSELinuxを停止する.
# setenforce 0