sftp サーバを立ててみる - sshd で chroot

環境は、

FreeBSD eagle 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:14:35 UTC 2009 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64

まずは、sftp でログインさせる用のアカウントを作成。group は sftponly に。
通常のログインはさせたくないので、

shell nologin

にしておく。

/etc/ssh/sshd_config に以下を追加。

Subsystem sftp internal-sftp

# さっきの sftponly にマッチさせるルールを書く
Match Group sftponly
# あんまりやりたくないけど、クライアントの関係でパスワード認証をしぶしぶ有効に
    PasswordAuthentication yes

    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no
# 通常はこっちですが、
#     ChrootDirectory /home/%u

# root になるディレクトリ。owner:group は root:wheel である必要がある。
# ついでに言うと、ディレクトリのパーミッションによっては弾かれるので、エラーになったらログを見てね。
    ChrootDirectory /export/tank
# これやっちゃうと nologin にした意味が無い気もするけど
    ForceCommand internal-sftp

これで完了! 簡単すぎるぐらい簡単だった。