computerの日記

Cisco,SHELL,C,Qt,C++,Linux,ネットワーク,Windows Scriptなどの発言です

AWS 上の EC2 サーバー上のトラブルを直した話

私は、5年程、以下のサイトを AWS で立ち上げています。

heavymetalhardrock.no-ip.info

今回は、内容の話ではなくて、サーバー管理の話となります。

あるとき、実験をしたくなり、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