アクセス不可になった原因はSELinux
20日頃にdnfによるアップデートを行いました。すると突然SSH接続が行えなくなりました。加えてブログサイトへのアクセスもエラーになってしまいまして…。
平たく言えばSELinuxの設定が初期化されたのかな?設定が変わってしまった。
SSH接続ができなくなった理由
うちのSSH接続用のポートはデフォルト(22番)ではない。
したがってSELinuxの設定が初期化されてしまうと22番となるため他のポートで通信しようとするとエラーとなる。
改めてデフォルト(22番)以外で通信したいなら以下のようなコマンドを実行しなければならない。
sudo semanage port -a -t ssh_port_t -p tcp SSH接続用ポート番号
# 設定確認(ポートの制御リストを表示)
sudo semanage port --list |grep ssh_port_t
もっと言いたいことがある。時間がかかった理由だ。
そこは結局原因が分からなかったんだ。何故かいつの間にか解決したからだ。では何が起こっていたのか?
それは上記コマンドを実行した結果エラーになったのだ。エラーの内容はSELinuxのコンテキストタイプが存在しないとかなんとか。そのタイプは”samba_gpupdate_exec_t”で、割り当てられているファイルは”/usr/bin/samba-gpupdate”だった。この登録を消すなりタイプを変更するなりしなければならないと思い以下のようなコマンドを実行してみたが変わらなかった。(ちなみに順不同)
# 存在しないタイプが割り当てられているファイルを特定
sudo semanage fcontext -l |grep -n samba_gpupdate_exec_t特定
# ファイルのタイプを追加(add)
sudo semanage fcontext -a -t user_home_t /usr/bin/samba-gpupdate
sudo restorecon -Rv /usr/bin/samba-gpupdate
# ファイルのタイプを修正(modify)
sudo semanage fcontext -m -t user_home_t /usr/bin/samba-gpupdate
sudo restorecon -Rv /usr/bin/samba-gpupdate
# ファイルへの割り当て情報を削除
sudo semanage fcontext -d /usr/bin/samba-gpupdate
# 再起動
sudo reboot
Nginxでエラーになった理由
Nginxはリバースプロキシとして利用している。
Nginx自体は動作しているがWordpressへリダイレクトされずにエラー画面が出力されていた。Nginxのログを確認すると”(13 Permittion deny)”が出力されていたと思う。
調べてみるとこれもSELinuxで設定する必要がある。私の環境では”httpd_can_network_connect”だけをOnにするとエラーが解消された。
恐らくはリバースプロキシとサーバを分けるなどする場合はもう一つコマンドを実行する必要があると思う。
# HTTP(S)接続するプロセス用の設定
sudo setsebool httpd_can_network_connect on -P
# リバースプロキシ用の設定
sudo setsebool httpd_can_network_relay on -P
# SELinux初期設定時のエラー
connect() to IPアドレス:ポート番号 failed (13: Permission denied) while connecting to upstream, client: ~