AWS 上の EC2 サーバー上のトラブルを直した話
私は、5年程、以下のサイトを AWS で立ち上げています。
今回は、内容の話ではなくて、サーバー管理の話となります。
あるとき、実験をしたくなり、AWS のマネージメントコンソールからログインして、秘密鍵でサーバーに SSH 接続し、/etc/security/limits.conf のある値を、有り得ないぐらいの数値にしました。
次に、SSH接続したところ、一瞬ログインはできるのですが、すぐにクローズされてしまいました。何度やっても同じです。要すれば、サーバー(本番サーバーと呼びます)にログインできなくなってしまった、ということになりました。
さて、困ったな。原因もわからないけど、/etc/security/limits.conf に関連しているに違いない。このサーバーは、SELinux を有効にしています。SELinux に関連しているのかもしれない(実は、これに気づくのに、かなり時間がかかりました)。
EC2 には、AMI (Amazon Machine Image) というものがあります。一度、現在のサーバリソースを AMI としておけば、他のサーバマシンに /dev/sdf としてマウントできるので、中の設定ファイルをいじれると思いました。[1]
AMI を作成するのは簡単です。
EC2 Dashboard から、インスタンスを選択して、Actions --> Image --> Create Image とします。
AMIs をクリックすると、マシンイメージができています。
このマシンイメージを、別に仕立てておいたインスタンス(試験サーバーと呼びます)の /dev/sdf としてマウントすれば(マウントポイントは適宜決定)、中を覗けます。
今回は、このマシンイメージを、/mnt/backups にマウントしました。
less /mnt/backups/var/log/audit/auditlog | grep denied とすると、limits.conf が unlabeled_t にラベリングされているようでした。では、このマシンイメージの SELinux を、permissive にします。
/mnt/backups/etc/selinux/config を編集しました。
また、以下のコマンドを実行して、次回起動時に、リラベルされるようにします。
# touch /mnt/backups/.autorelabel
試験サーバーを停止します。
Volumes をクリックして、State が、in-use になっているもので、試験サーバーに紐づいているものを、Dettach します。すくなくとも、2つあるはずです。
次に、修正したマシンイメージを、本番サーバー(ID を事前に把握しておきます、なお、名前を付けておけばわかりやすいです)の、/dev/sda1 として指定します。
次に、本番サーバーを立ち上げます。
しばらく待ちます。
SSH 経由でログインできましたね。
ls -lZ /etc/security/limits.conf として、ラベルを確認します。
etc_t になっていますね。
では、/etc/selinux/config を編集して、permissive から、enabled に変更します。
# shutdown -r now あるいは、コンソールから、restart
お腹すいたァ。。
参考
[1]
Amazon マシンイメージ (AMI) - Amazon Elastic Compute Cloud