sshログインしたユーザのディレクトリを制限するには。

要するにchroot
リモートユーザにどうしてもシェルを使わせる必要があるけれども、かといってシステムの中をじろじろ見られるのが嫌な場合に使う。


OpenSSH 4.9以降であればデフォルトで機能が入っている。
sshd_configのChrootDirectoryに続けてディレクトリを指定すれば、そこにchrootされる。
ただ、このままだと自分もchroot環境へログインしてしまうことになるので、chroot環境下にログインさせるユーザをMatch Userで指定する。複数ユーザの場合はカンマ( , )で羅列する。

ユーザ「someone」がsshログインした際、ディレクトリ/chroot/をルートディレクトリになるよう設定した例。

# Example of overriding settings on a per-user basis
Match User someone
       ChrootDirectory /chroot/
       #ChrootDirectory %h
       X11Forwarding no
       AllowTcpForwarding no

# override default of no subsystems
#Subsystem      sftp    /usr/local/libexec/sftp-server
Subsystem       sftp    internal-sftp

なお、上記の例でユーザsomeoneがログインした場合、/chroot/etc/passwdのsomeoneレコードに示すホームディレクトリへ移動することになる。someoneのホームディレクトリが/home/someoneとなっていた場合には、/chroot/home/someoneへと移動する。/chroot/直下へ移動するわけではない。
また、/chrootパーミッションが775とか、ちょっと変わった値になっているとエラーになる。755にしたところ問題なし。
さらに、sftpを使わせたい場合には、上記のようにinternal-sftpにしておくこと。


そのほか、chrootした先に/etc/passwdやら、シェルやら、必要なファイルを揃えないといけないのだが、適当にググれば出てくるので割愛。
とはいっても、ググって出てくるのは孫引きした情報を並べたサイトばかりで閉口するが(その意味では当ブログだって同じだが)、下記サイトはとても参考になった。
straceなんて初めて使った。

http://www.gentei.org/~yuuji/support/uu/200310/part2.html