AmazonLinuxのauthorized_keysが消える?


E06_7106相変わらずAMIと悪戦苦闘。自分で自分を絞めあげている気がするけれど。セキュリティとかどーのこーの。

今回の作業中、なんだか危険なニオイがするものを見つけたのでメモ。表題のとおりですけれど。

Creative Commons License photo credit: hisashi_0822

というのも、Amazon Linuxが今月正式版リリースされました。今回のプロジェクトで使うAMIを作っていたのですが、いつも SSH でつなぐユーザを ec2-user(デフォルト)からほかのユーザに変えているんです。そのため、ユーザを作って、ec2-user が持ってるauthorized_keys を作ったユーザに配置する、なんてことをしています。

1
2
3
4
5
6
7
8
[ec2-user@hogehoge ~]$ sudo su -
[root@hogehoge ~]# useradd testuser
[root@hogehoge ~]# su - testuser
[testuser@hogehoge ~]$ mkdir .ssh
[testuser@hogehoge ~]$ chmod 700 .ssh
[testuser@hogehoge ~]$ exit
[root@hogehoge ~]# cp /home/ec2-user/.ssh/authorized_keys /home/testuser/.ssh/
[root@hogehoge ~]# chown testuser:testuser /home/testuser/.ssh/authorized_keys

上のコマンドのようにして、testuser をログインユーザにする、なんてことをしています。

その後もいろいろ設定して、さあAMI登録しよう、と ec2-bundle-vol コマンド>ec2-upload-bundleコマンドのコンボをやって、S3にアップし、AMI Registする。いったん設定したインスタンスを破棄して、登録したAMIで起動し直します。

するとさっき作った testuser の authorized_keys がそっくり消えている!!というかログインできない!

1
2
> ssh -i aws-key testuser@ec2-xxx-xxx-xxx-xxx.amazonaws.com
Permission Denied (Public key)

こんな感じ。testuserをec2-userに変えれば行けるんだけど・・・なんでだろう。とググってみると、どうやらAMI公開するときのマナーとして、他ユーザの authorized_keys を起動時に消しておきましょう!なんていうルールがあるっぽい。ハタ迷惑極まりない!!

いやまあ気持ちはわかるんだけどさー、こういう運用している時もあるんだし、消さない設定とかないのかなぁ。そもそもこの現象、Amazon Linuxのβ版までは起こらなかったはず。正式版からこういうルールが生まれたのかなぁ・・・。

うーん、まいった。

さらに調べてみると、公開鍵・秘密鍵の設定系はことごとく消すらしい。

1
2
3
4
[testuser@hogehoge ~]$ ssh-keygen -t rsa
...公開鍵を作ってみる...
[testuser@hogehoge ~]$ touch .ssh/config
...ssh用設定ファイルを作ってみる...

として、.ssh 内に id_rsa と id_rsa.pub 、SSH設定ファイルを作った状態で AMI 登録し、インスタンスを起動してみると、configだけ残る!! なんじゃそりゃ!?

仕方ないから、ちょっち強引だけど、インスタンス起動時に authorized_keys を ec2-userからコピーするやり方を試してみるかなぁ。それか作った設定ファイルをいったん tar化して残しておき、インスタンス起動時にそれを解凍するか。

っていうか実運用してる今のインスタンス大丈夫だろうか。もし起動してもログインユーザが使えなかったらヤバいなぁ・・・。もしこの問題を回避できる策を持ってる方がいましたら、ご一報いただけると助かります。