sftp+rsshでchrootする方法
ubuntu8.04サーバーのテスト環境で動くまで3時間くらいハマって発狂しかけたのでメモ。
rsshをインストール
特に難しいことはなく、
$ sudo apt-get install rssh
でインストールされる。
rsshの設定。
これも特に難しい事は無い。
/etc/rssh.confを開いて
allowscp allowsftp user=hoge:011:00011:/home/hoge
を設定すれば良い。
allowscpとallowsftpは行頭のコメントを外す。
user=〜の部分は新しく書き足す。
user=〜の部分は前から
chrootする為の準備
ここで長いことハマった。
まず最初に/usr/share/doc/rssh/examples/mkchroot.shの内容を変更する。
'copy SSH files'で検索をすると下記のような記述が見つかる。
# copy SSH files scp_path="scpのパス" sftp_server_path="sftp-serverのパス" rssh_path="rsshのパス" chroot_helper_path="rssh_chroot_helperのパス"
それぞれ「〜のパス」部分を正しいパスへ修正する。
最初から正しければ触る必要は無い。だけど正しくない場合のが多いと思う。
mkchroot.shを修正後、実行する必要のあるコマンドをシェルスクリプトにまとめると以下の通り(一部横着あり)。
#!/bin/sh # スーパーユーザーで実行。 # 第一引数を対象のユーザーとする。 /usr/share/doc/rssh/examples/mkchroot.sh /home/$1 cp -f /lib/* /home/$1/lib chmod u+s /usr/lib/rssh/rssh_chroot_helper mknod -m 666 /home/$1/dev/null c 1 3 /etc/init.d/sysklogd stop syslogd -a /home/$1/dev/log cat /home/$1/etc/passwd | grep $1 | tee /home/$1/etc/passwd > /dev/null 2>&1
mkchroot.shがエラーを吐くようだったら出力を見て適宜修正。
最後にchrootをしたいユーザーのログインシェルをrsshへと変更する。
完了したらsftpで接続テストをして、繋がれば成功。
失敗するようであれば/var/log/syslogから原因分析。
なお、OpenSSHのバージョンが4.9p1以上であれば、chrootの機能が搭載されているので、chrootだけが目的ならrsshを使う必要は無い。
接続方式をsftpやscp等に限りたいという場合にはrsshは使い道がある。