WordPressのアップデートができない!?SELinuxによる書き込み制限

SELinux を運用しながら WordPress を更新する際に,FTP 接続情報の入力画面が表示される 問題についての解決策をまとめました。


問題の原因

SELinux により,WordPress のディレクトリ./wordpress に対して 書き込み権限が制限されている ため,WordPress が通常の 直接更新 を行えず、FTP 接続を求めてきます。

エラーログ(ausearch の出力)からも,httpd_sys_content_t のコンテキストでは 書き込みが許可されていない ことが確認できます。

type=AVC msg=audit(xxxxxxxxx.xxx:xxxxx): avc: denied { write } for pid=xxxx comm="php-fpm" name="wordpress" dev="dm-0" ino=xxxxxxxxx scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=dir permissive=0

解決策

① SELinux のコンテキストを一時的に変更

以下のコマンドで,WordPress のディレクトリに書き込み権限を付与 する。

sudo chcon -R -t httpd_sys_rw_content_t .(どこか)/wordpress/

この操作で,WordPress が更新ファイルをダウンロードし,直接適用できるようになります。


② WordPress の更新を実施

管理画面から WordPress の更新 を実行する。
FTP 接続画面が表示されずに,直接更新ができるようになります。


③ 更新後、元の SELinux コンテキストに戻す

更新完了後に、本来の SELinux の設定に戻す ことで、余計な書き込み権限を解除します。

sudo restorecon -R -v .(どこか)/wordpress

これにより,WordPress ディレクトリの SELinux コンテキストがデフォルトに戻り,セキュリティが保たれます。


④ 永続的に書き込みを許可する場合(オプション)

頻繁に WordPress を更新する場合は,SELinux の設定を変更して 永続的に書き込みを許可 することもできます。(セキュリティ的にはやや劣後します)

sudo semanage fcontext -a -t httpd_sys_rw_content_t ".(どこか)/
wordpress(/.*)?"
sudo restorecon -R -v .(どこか)/wordpress

まとめ

方法SELinux の設定更新後に戻す必要
chcon で一時的に変更httpd_sys_rw_content_t を適用必要restorecon
semanage fcontext で永続的に許可.(どこか)/wordpress/ のコンテキストを変更不要

どの方法が適切か?

🔹 厳格なセキュリティ管理が必要な場合
 ✅ chcon を使って一時的に変更し,更新後 restorecon で戻す
🔹 他のアプリケーションの影響を最小限にしたい場合
 ✅ semanage fcontext.(どこか)/wordpress のみ書き込み許可

また,「setsebool -P httpd_unified 1」 を有効化する方法もあるようですが,セキュリティ的にさらに劣後することになります。これについては,他サイトを参照してください。(未検証)

これらの方法で,SELinux を有効に保ちつつ,WordPress の更新をスムーズに行えるようになるでしょう。