ref.
chroot するディレクトリを /chroot の例
↑のエントリにも書いたように、以前のpatch版のchrootの場合は sshd_configには特別に記述をせずに、/etc/passwdに
hoge:x:1000:1000::/chroot/./home/hoge:/bin/bash
と書くだけだった。
これに対してopenssh 4.9 以降では、sshd_configに
Match user hoge ChrootDirectory /chroot
と書いて、/etc/passwd には 設定するディレクトリ、/chroot からのパスである/home/hoge を記述する。
hoge:x:1000:1000::/home/hoge:/bin/bash
chroot ユーザで公開鍵認証するとき
ユーザの実際のホームディレクトリは /chroot/home/hoge なので、当然公開鍵は /chroot/home/hoge/.ssh/authorized_keys になる。
ところが、このhogeユーザで鍵認証しようとしたところ、sshdが探すファイルは /home/hoge/.ssh/authorized_keys だった。( /etc/passwd に /home/hoge と書いているため? )
つまり、
- hoge ユーザが鍵認証を要求
- sshd は /etc/passwdに従って /home/hoge/.ssh/authorized_keys を探す
- hoge は/chroot 以下にホームディレクトリがあるので、公開鍵がないため認証できない
- (ここから先はパスワード認証を許可している場合) hoge の パスワード認証を行う
- sshd は Match user hoge を設定を読んで、ChrootDirectory /chroot を適用
- hoge は /chroot をroot とした環境にログイン
っていう感じに。
対策
じゃあ、Match user の設定に AuthorizedKeysFile も書けばいいじゃん。
Match user hoge ChrootDirectory /chroot AuthorizedKeysFile /chroot/homge/hoge/.ssh/authorized_keys
と思ってやってみたけど、AuthorizedKeysFile は Match 内で使えないのでダメでした。
というわけで今のところ思いつくのは
のどっちかかなー。とりあえずsymlink張ってお茶を濁す感じで。