CentOS5.0でサーバー運用をしており、こちらのサイトをよく参考にさせていただいています。 rssh解説ページでchroot jailができなかった、とのことでしたが 必要に迫られてチャレンジしてみたところ なんとかrssh + chroot jail環境を構築することができたので さしでがましいようですが日頃のお礼がてら簡単に構築手順をご報告させていただきます。 1.まずrsshをyumでインストールし、/etc/rssh.confをそれなりに編集しました。(chrootpathのコメント解除等) 2.yumでインストールするとchroot jail環境を比較的手軽に構築するためのmkchroot.shがないので 本家からsource tarballをDLしてきてこのシェルスクリプトだけ抽出し、 「mkchroot.sh /usr/local/chroot」というように実行しました。 3.これでできあがり…だったらよかったのですが、 mkchroot.sh内でscpやrsshの依存ライブラリを抽出・コピーする部分で何件かエラーが発生したので 手動でlddを再実行してコピーに失敗したファイル群を/usr/local/chroot/以下に同じ階層構造になるようにコピーしました。 (ファイル群、と言っても私の場合は/lib/ld-linux.so.2ぐらいだった気がします) それとエラー発生に伴って「/usr/local/chroot./」というゴミディレクトリもできてしまっていたので削除しました。 4.さらにmkchroot.shでは何もしてくれていない(?)ようなのですが dev/nullも必要だったようなので、本物の/dev/nullを参考に 「mknod /usr/local/chroot/dev/null c 1 3; chmod 666 /usr/local/chroot/dev/null」というようにして作成しました。 5./etc/passwdが/usr/local/chroot/etc/にコピーされましたが ほとんどのユーザーはchroot jail内では不要なので rootとscp接続ユーザーの情報を残して後は削除しました。 /etc/passwd側はこんな感じ… root:x:0:0:root:/root:/bin/bash … scpuser:x:501:100::/usr/local/chroot/home/scpuser:/usr/bin/rssh で、/usr/local/chroot/etc/passwdの方はこんな感じです。 root:x:0:0:root:/root:/bin/bash scpuser:x:501:100::/home/scpuser:/usr/bin/rssh 6.あとは/usr/local/chroot/home/scpuser/などを作成し sftp接続した際にグループをIDではなく名称で表示させるために /etc/groupを/usr/local/chroot/etc/にコピーしました。 passwdと同様、これも必要最低限でいいと思うのですが面倒だったので…(^^; 私の場合、この手順で構築した最終的なディレクトリ・ファイル構成(ls -FR /usr/local/chroot)はこんなカンジです。 /usr/local/chroot/: dev/ etc/ home/ lib/ usr/ /usr/local/chroot/dev: null /usr/local/chroot/etc: group ld.so.cache ld.so.conf nsswitch.conf passwd /usr/local/chroot/home: scpuser/ /usr/local/chroot/home/scpuser: /usr/local/chroot/lib: ld-linux.so.2* libcom_err.so.2* libcrypto.so.6* libnsl.so.1* libnss_files.so.2@ libutil.so.1* libc.so.6* libcrypt.so.1* libdl.so.2* libnss_files-2.5.so* libresolv.so.2* /usr/local/chroot/usr: bin/ lib/ libexec/ /usr/local/chroot/usr/bin: rssh* scp* /usr/local/chroot/usr/lib: libgssapi_krb5.so.2* libk5crypto.so.3* libkrb5.so.3* libkrb5support.so.0* libz.so.1* /usr/local/chroot/usr/libexec: openssh/ rssh_chroot_helper* /usr/local/chroot/usr/libexec/openssh: sftp-server* ここまでやってWinSCPで接続テストをしたところ、接続エラーになってしばらく悩みましたが、 rsshのFAQページにWinSCPのscpはサポートしないというのを見つけ、 http://www.sdri.co.jp/rssh/faq.html#12 sftpにして接続できました。 WinSCPのscpはダメでしたがPuTTY付属のpscpなら(もちろんpsftpも)OKでした。 mkchroot.shの最後でsyslogdのためにdev/logの設定もすべき、といったメッセージが表示されますが 私はやらなかったのでとりあえず動いてるみたい…といった程度の情報ですが どなたかの参考になれば幸いです(^-^)
おやじがチャレンジしたのは3年近く前の話で、当時はうまく動きませんでした。何が問題だったかも忘れました。サイトを見ると2.3以降でないと駄目みたいな記述がありますね。
時間があれば、再チャレンジしてみたいと思います。
> CentOS5.0でサーバー運用をしており、こちらのサイトをよく参考にさせていただいています。
> rssh解説ページでchroot jailができなかった、とのことでしたが
> 必要に迫られてチャレンジしてみたところ
> なんとかrssh + chroot jail環境を構築することができたので
> さしでがましいようですが日頃のお礼がてら簡単に構築手順をご報告させていただきます。
>
> 1.まずrsshをyumでインストールし、/etc/rssh.confをそれなりに編集しました。(chrootpathのコメント解除等)
> 2.yumでインストールするとchroot jail環境を比較的手軽に構築するためのmkchroot.shがないので
> 本家からsource tarballをDLしてきてこのシェルスクリプトだけ抽出し、
> 「mkchroot.sh /usr/local/chroot」というように実行しました。
> 3.これでできあがり…だったらよかったのですが、
> mkchroot.sh内でscpやrsshの依存ライブラリを抽出・コピーする部分で何件かエラーが発生したので
> 手動でlddを再実行してコピーに失敗したファイル群を/usr/local/chroot/以下に同じ階層構造になるようにコピーしました。
> (ファイル群、と言っても私の場合は/lib/ld-linux.so.2ぐらいだった気がします)
> それとエラー発生に伴って「/usr/local/chroot./」というゴミディレクトリもできてしまっていたので削除しました。
> 4.さらにmkchroot.shでは何もしてくれていない(?)ようなのですが
> dev/nullも必要だったようなので、本物の/dev/nullを参考に
> 「mknod /usr/local/chroot/dev/null c 1 3; chmod 666 /usr/local/chroot/dev/null」というようにして作成しました。
> 5./etc/passwdが/usr/local/chroot/etc/にコピーされましたが
> ほとんどのユーザーはchroot jail内では不要なので
> rootとscp接続ユーザーの情報を残して後は削除しました。
> /etc/passwd側はこんな感じ…
> root:x:0:0:root:/root:/bin/bash
> …
> scpuser:x:501:100::/usr/local/chroot/home/scpuser:/usr/bin/rssh
> で、/usr/local/chroot/etc/passwdの方はこんな感じです。
> root:x:0:0:root:/root:/bin/bash
> scpuser:x:501:100::/home/scpuser:/usr/bin/rssh
> 6.あとは/usr/local/chroot/home/scpuser/などを作成し
> sftp接続した際にグループをIDではなく名称で表示させるために
> /etc/groupを/usr/local/chroot/etc/にコピーしました。
> passwdと同様、これも必要最低限でいいと思うのですが面倒だったので…(^^;
>
> 私の場合、この手順で構築した最終的なディレクトリ・ファイル構成(ls -FR /usr/local/chroot)はこんなカンジです。
> /usr/local/chroot/:
> dev/ etc/ home/ lib/ usr/
>
> /usr/local/chroot/dev:
> null
>
> /usr/local/chroot/etc:
> group ld.so.cache ld.so.conf nsswitch.conf passwd
>
> /usr/local/chroot/home:
> scpuser/
>
> /usr/local/chroot/home/scpuser:
>
> /usr/local/chroot/lib:
> ld-linux.so.2* libcom_err.so.2* libcrypto.so.6* libnsl.so.1* libnss_files.so.2@ libutil.so.1*
> libc.so.6* libcrypt.so.1* libdl.so.2* libnss_files-2.5.so* libresolv.so.2*
>
> /usr/local/chroot/usr:
> bin/ lib/ libexec/
>
> /usr/local/chroot/usr/bin:
> rssh* scp*
>
> /usr/local/chroot/usr/lib:
> libgssapi_krb5.so.2* libk5crypto.so.3* libkrb5.so.3* libkrb5support.so.0* libz.so.1*
>
> /usr/local/chroot/usr/libexec:
> openssh/ rssh_chroot_helper*
>
> /usr/local/chroot/usr/libexec/openssh:
> sftp-server*
>
> ここまでやってWinSCPで接続テストをしたところ、接続エラーになってしばらく悩みましたが、
> rsshのFAQページにWinSCPのscpはサポートしないというのを見つけ、
> http://www.sdri.co.jp/rssh/faq.html#12
> sftpにして接続できました。
> WinSCPのscpはダメでしたがPuTTY付属のpscpなら(もちろんpsftpも)OKでした。
>
> mkchroot.shの最後でsyslogdのためにdev/logの設定もすべき、といったメッセージが表示されますが
> 私はやらなかったのでとりあえず動いてるみたい…といった程度の情報ですが
> どなたかの参考になれば幸いです(^-^)
rssh.confの内容がよくわからないですが、
この通りやると、確かにwinscpから接続はできました。
しかし、chroot下のディレクトリ以外ものぞけてしまいますね。
これだと、普通につないだときと変わらないと思うんですが、
どうなんでしょうか?
rsshにこだわらないなら
最近のopenssh(openssh-4.9p1以降)はChrootDirectoryパラメータが使え
sftp専用ディレクトリなら、ライブラリのコピーなど複雑な処理をすることなく
それなりの効果を得られる
> rsshにこだわらないなら
> 最近のopenssh(openssh-4.9p1以降)はChrootDirectoryパラメータが使え
> sftp専用ディレクトリなら、ライブラリのコピーなど複雑な処理をすることなく
> それなりの効果を得られる
centos5.2+openssh-5.1pはrpmbuildが実行できないので、断念。
openssh-5.0pに落として、rpmbuild、インストールまで完了したんですが、
chrootユーザでログインして、suでrootになれない状態は確認できたのですが、
chrootディレクトリ外へ出れる状態になっています。
pwdをたたくと、本来「/」となるべきところが、「/home/$USER」に・・・
これはバグなんでしょうか?
> > rsshにこだわらないなら
> > 最近のopenssh(openssh-4.9p1以降)はChrootDirectoryパラメータが使え
> > sftp専用ディレクトリなら、ライブラリのコピーなど複雑な処理をすることなく
> > それなりの効果を得られる
>
> centos5.2+openssh-5.1pはrpmbuildが実行できないので、断念。
>
> openssh-5.0pに落として、rpmbuild、インストールまで完了したんですが、
> chrootユーザでログインして、suでrootになれない状態は確認できたのですが、
> chrootディレクトリ外へ出れる状態になっています。
> pwdをたたくと、本来「/」となるべきところが、「/home/$USER」に・・・
>
> これはバグなんでしょうか?
参考 CentOS5.2 openssh-5.1p1(ソースからインストール)
sftp専用ユーザ・グループの設定
仮定 一般ユーザ ( umi ) とします
パスワードを設定しないと公開鍵認証でもエラーになります
groupIDは/etc/groupファイルを参照して未使用の番号を使用します
# useradd -s /sbin/nologin umi
# passwd umi
New UNIX password:
Retype new UNIX password:
# groupadd -g 103 sftponly
# gpasswd -M umi sftponly
書き込み可能なディレクトリの作成
chrootディレクトリの所有者はrootでなければなりません
公開鍵のディレクトリは ( umi:umi 700 ) のまま使用します
書き込み可能なディレクトリ ( 例 /home/umi/pub ) をつくります
# chown root:root /home/umi
# chmod 755 /home/umi
# mkdir /home/umi/pub
# chown umi:sftponly /home/umi/pub
configファイルの修正
*省略*
Subsystem sftp internal-sftp
*省略*
Match Group sftponly
AllowTcpForwarding no
ChrootDirectory /home/%u
できるみたいです。
http://blog.gcd.org/archives/51069231.html