システムグループに所属する、鰯(いわし)です。
最近ハマっているのは、AWSとnode.js+express.jsです。 本日は、OpenSSH4.8以降で追加されたChrootDirectoryを使ってssh/chroot環境の作成を行いましたので、メモ的に作業ログをここに載せちゃいます。

ちなみにですが、昨今、弊社ではAWSの環境が増えて来て、テスト的になにかするのもAWSのAmazon Linuxで気軽にインスタンス起動って感じでやってますので、作業環境はAWSのAmazon Linuxを前提に進めさせて頂きます。

chroot環境作成

まずは、sshdの設定ですが、こんな感じの環境を作成します。
/etc/ssh/sshd_config

あとは、chroot環境用に最低限必要なものを用意する感じですが、何もなさ過ぎだと不便なので、多少のものは用意しつつという感じで、そろえます、個人的に環境とかの用意は、Chefなどでも良いんですが、シンプルにshellで走らせる方が、どこでも動く感じで好きです。

なので、環境作成用に作成したshellを貼付けておきます、あと、こういう環境作成用途のshellは、再度、実行しても問題ないように、組んでおくと、間違って実行してしまった場合や、少しずつ環境に追加していく作業なども、実行し直せば良いだけなので、楽で良いです。

という事で、以下のスクリプトをrootユーザで実行して環境構築します。 変更した場合などは、修正後に再度実行すれば追加のものが処理される感じなので、よしなにやってください。

環境が構築されたら、/etc/fstab に、proc/dev とかの mount 設定追加する感じです

追記:2013/03/14 11:30 fstabへの記載ですが、間違ってたので訂正と /dev 以外の /proc, /sys は、なぜか fstab だとタイミングの問題かマウントされても中が空っぽ状態… やむなく、rc.local に入れ直して、正常にマウントできました…

ログインユーザの作成

sshでログインさせるユーザは、こんな感じで追加してます。
今回、ハマったのは、sshdの鍵認証させるときに、ホームディレクトリのPathを /home/username って感じで設定した場合、 鍵の認証をする時は、 /home/username/.ssh を参照するので、ログイン後の /chroot/home/username/.ssh は見てくれない事でしたね。

なので、以下のスクリプトでは、 本来のホームディレクトリは、/chroot 以下へ用意しつつ、 /home/username/.ssh だけシンボリックリンクを貼っとくようにしてます。

ユーザ作成が完了したら、あとは通常のsshのログイン設定 authorized_keys とかを設定すれば、たぶんOKです。 今回、いろいろハマりながらも、お世話になったサイトを紹介させて頂きます。 ご参考までにどうぞ
http://d.hatena.ne.jp/hogem/20100122/1264169759
http://www.sssg.org/blogs/hiro345/archives/9147.html
http://blog.layer8.sh/ja/2011/12/16/chroot%E3%82%92%E8%A8%AD%E5%AE%9Acentos/

あわせて読みたい記事