sftpとChrootDirectory(3)

4月14日のエントリ4月25日のエントリで書いた件。大体の環境の作り方はssh5.0のREADMEにしたがって4月14日のエントリで書いていますが、認証方法がイマイチ検証できていませんでした。
4月14日のエントリの段階では、ユーザのホームディレクトリを/(ルート)にして、本来のホームディレクトリのオーナをrootにしなくてはいけないらしくて、その影響で公開鍵と秘密鍵の認証はできないのかなぁと書きました。
でも昨日ユーザのホームディレクトリを/home/hogeみたいに普通のディレクトリで、しかもオーナもそのままでちゃんとChrootDirectoryしてくれることが分かりました。

つまり、こんな手順でOK。

ユーザを作成する。

公開鍵で認証するからパスワードは設定不要。

# useradd user

sftponlyというグループを作成する。

# groupadd sftponly

作成したユーザをsftponlyグループに追加する。

/etc/groupを編集する。

sftponly:x:1002:user

パスワードでの認証を無効にする。

/usr/local/etc/sshd_configを編集。

PasswordAuthentication no

内部のsftpを使うように指定する。

こっちもsshd_configを編集ですね。

#Subsystem      sftp    /usr/local/libexec/sftp-server
Subsystem       sftp    internal-sftp

認証されたユーザがsftponlyグループの場合、ChrootDirectoryを実施。

Match group sftponly
         ChrootDirectory /home/%u
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp

ここまでsshd_confiを編集したら、sshdを再起動。

公開鍵をセット

$HOME/.sshにauthorized_keysを通常通り設置。

これでsftpだけで、当該ユーザのホームディレクトリ以下しか見えなくなりました。

2008年11月26日追記

上記の手順ではNGです。必要な条件は

なので、ChrootDirectoryを完全にホームディレクトリから分割することが必要です。

# mkdir -p /home2/hoge
# chown root:root /home2/hoge

ディレクトリを作成し、sshd_configをこのように指定。

Match group sftponly
         ChrootDirectory /home2/%u
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp