昨年Duplicatorで外部レンタルサーバーに当サイトをコピーした時には何の問題もなくスムーズに完了しましたが、今回自宅のバックアップサーバー(CentOS7)にコピーする際にエラーになりました。
Duplicatorで作成したインストールファイルをバックアップサーバーにコピーするまでは順調で、過去記事”DuplicatorでWordPressサイトをコピー”のとおりです。
バックアップサーバーにコピーしたinstaller.phpにアクセスすると、Root Directry Failになり、PHPによる書き込みが出来ないエラーらしいので、httpdのlogを確認しました。
tail -f /var/log/httpd/error_log
PHP Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
PHP Fatal error: Unknown: Failed opening required ‘/var/www/cat-one/installer.php’ (include_path=’.:/usr/share/pear:/usr/share/php’) in Unknown on line 0
アクセス制限のエラーはSELinuxの厳しさによるものが多いので、SELinuxトラブルシューターで確認すると次の通り、しっかり制限されていました。
SELinux is preventing /usr/sbin/httpd from read access on the file /var/www/cat-one/installer.php.
***** Plugin catchall_boolean (89.3 confidence) suggests ******************
If httpd がユーザーのコンテンツを読み取ることを許可します。 がしたい
Then ‘httpd_read_user_content’ boolean を有効にすることにより、 これを SELinux に伝える必要があります。
詳細情報については、’None’ man ページをご覧下さい。
Do
setsebool -P httpd_read_user_content 1
***** Plugin catchall (11.6 confidence) suggests **************************
If httpd に、 installer.php file の read アクセスがデフォルトで許可されるべきです。
Then バグとして報告してください。
ローカルのポリシーモジュールを生成すると、
このアクセスを許可することができます。
Do
このアクセスを一時的に許可するには、以下を実行してください。
# grep httpd /var/log/audit/audit.log | audit2allow -M mypol
# semodule -i mypol.pp
Additional Information:
(以下略)
では、ということでSELinux管理ツールでhttpd_read_user_contentを許可してみます。
パッケージは見つかったようですが、まだルートディレクトリのアクセスがFailedになっています。
SELinuxトラブルシューターで確認するとまだ他にもひっかかっていました。
移行作業中は、SELinuxを一時的に解除した方がよさそうなのでSELinux管理ツールで強制モード”容認”にしておきます。
SELinuxによるアクセス制限を止めることによりエラーは出なくなりました。
ここからは以下のように順調に進みました。
最後にインストールに使ったファイルを削除して終了です。