本サーバをこっそりFedora 26から27にアップグレードしてみたところ、不具合が出たので、修正した件。

By | 2018年5月30日 , Last update: 2018年12月1日

はじめに

NUC(NUC7i5BNH)を購入してからというものの、そちらのセットアップ作業や廃棄予定のPCから別のPCへのストレージの玉突き移転が必要になったり、動画のネタが大量に襲いかかってきて、その編集に追われたり、本業が急にいそがしくなったりで、このWordpressが可動しているサーバ(以下、「本サーバ」と書きます。)の(OSも含めた)インフラのメンテナンスがおろそかになっていました。

そんな中、本サーバのOSを遅ればせながらFedora 26から27にアップグレードしてみました。

アップグレード後2日ほど動かしてみた感じでは一見問題なさげに見えたのですが、ちょっと大きめの問題が出てしまったので、この記事ではそれについて書きます。

スポンサーリンク

問題発覚のきっかけ。

本WebサイトにはAmazon Product Advertising API を利用した「広告ギャラリー」というページがあります(※その後、2018年11月に公開を終了しました。詳細についてはこちらをご参照ください)。

この仕様については広告ギャラリーを作ったときに書いた記事に書きましたので、ここでは詳細は省略しますが、おおむね1時間おきくらいに更新されるはずの広告が更新されていないのにFedora 27へアップデートした2日後あたりに気がつきました。

それで、本サイトのダッシュボードをよーく見てみると…

“WordPress Events and News”のカードの情報が取得できず、エラーメッセージが表示されていました(スクリーンショットは撮っていませんでした。すみません)。

広告ギャラリーだけなら?の書いたPHPのコードのバグだったかもしれませんが、Wordpressのダッシュボードで、外部のサイトとの通信時にエラーが発生しているとなると…

ピコーン!!

SELinux関連ですかね、とおおよその見当がつきました。

困ったときのaudit頼み。

SELinux関連の問題であるところまであたりがついたところで、/var/log/audit/audit.logに関連するエラーが出ていないかどうか確認してみます。すると…

type=AVC msg=audit(1527071735.137:29098): avc: denied { name_connect } for pid=5437 comm=”php-fpm” dest=443 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0

 
のような「name_connectが拒否されています。」(超意訳)というエラーメッセージが大量に出力されていました。

問題解決の方法。

「ということは、name_connectでググれば解決策が見つかるんじゃね?」と思ったので、Google先生に聞いてみたところ、以下の記事をはじめとして関連する記事が大量にヒットしました。

Bug 1528722 – SELinux is preventing php-fpm from ‘name_connect’ accesses on the tcp_socket port 80.

上記の記事にある通り、Fedora 27ではhttpd_can_network_connectの値がoffになっていることが原因のようですので、以下の手順で設定値の確認及び修正を行います。

  1. root権限で以下のコマンドを実行し、httpd_can_network_connectの設定を確認します。
    [root@pandanote.info iconic-one]# getsebool httpd_can_network_connect
    httpd_can_network_connect –> off

    スポンサーリンク

     
    ものの見事にoffになっていますね。orz

  2. root権限で以下のコマンドを実行し、httpd_can_network_connectの設定を変更します。再起動後も設定を維持するためには-Pオプションを指定します(-Pオプションを指定しないと、再起動後は設定がデフォルト値に戻ってしまいます)。
    [root@pandanote.info iconic-one]# setsebool -P httpd_can_network_connect on

     

  3. root権限で以下のコマンドを再度実行し、httpd_can_network_connectの設定を確認します。
    [root@pandanote.info iconic-one]# getsebool httpd_can_network_connect
    httpd_can_network_connect –> on

     

  4. しばらくサーバの状況を観察します。本サイトでは広告ギャラリーに新しい広告が作成されているかどうか確認しました。
スポンサーリンク

まとめ

ここまでFedora 27へのアップグレードの際に発生したhttpdからの通信についてのトラブルとその解決法について書きました。SELinuxが有効になっているとアップグレード時にこの種類のトラブルが発生することがありますけど、自分の経験上、Google先生に聞いてみるとすぐに解決することがほとんどだったので、幸か不幸か幸いにして

「解決できないから、SELinuxを無効にしちゃえ!!」

という判断に至ったことはありません。

外部に公開しているサーバでは少しでもセキュリティ上のリスクは減らしたいので、SELinuxはできるだけ有効にしておいた方が良いと個人的には思います。

ところで、Wordpressが今年(2018年)の5月27日で15周年だったんですね。

自分(panda)の誕生日?とWordpressの誕生日?が一緒だったみたいで、びっくりです。

この記事は以上です。