ここでは、OpenSSH をchroot
環境として動作させる方法について解説していきます。OpenSSH をchroot
環境で動作させることで、ホームディレクトリより上位の階層へアクセスできないようにすることができます。いくらOpenSSH
で通信を暗号化しても階層内を自由に行き来できるのでは、せっかくのセキュリティも効果半減です。自分ひとりでSSH
を使っているならあまり問題とならないかもしれませんが、友達にもログインさせたいとかいった場合には、自由にアクセスされてしまったのではちょっといい心地はしないでしょう。そんなわけで、OpenSSH
を chroot として動作させ、アクセスできるディレクトリを限定させることでより安心してSSH
を使うことができるようになりますので、是非、試してみてください。
|
|
■OpenSSH chrootパッチのダウンロード
OpenSSH を新規にインストールする場合は、最初からパッチが当てられたもの(openssh-3.7p1-chroot.tar.gz)をダウンロードしてインストールするといいでしょう。
以下はWinSCPでユーザーとしてSSH2でログインした画面です。OpenSSH は、chroot されていないために、ユーザーのホームディレクトリより上位の階層へアクセスすることができてしまいます。これは、セキュリティ上、非常に好ましくないため、ユーザーディレクトリより上位の階層へはアクセスできないようにしたい。FTPだったら設定ファイルをちょこちょこと編集すれば、容易にchroot環境にすることができますが、OpenSSH
の設定ファイルにはchroot をさせるためのディレクティブが記述されていません。/usr/local/etc/sshd_config
を開いて、chrootを試みようとした方もたくさんいるでしょう。けれども、OpenSSH はパッチを当てることでchrootを実現することができるようになっていますので、以下で解説を進めていきます。
手順としては、以下の通りです。
1.ユーザーのホームディレクトリを/home/tamesi/./ のようにする
2.chroot 用のPatch をあて、再コンパイル
3.ユーザーのホームディレクトリにシェルをコピーする
まず、ここでは、仮想のユーザーをtamesi として作成して解説します。予め、/home 以下にtamesi
ディレクトリを作成し、useradd に-d オプションをつけてホームディレクトリを作成します。ユーザーを作成したらパスワードも設定しておいてください。
# mkdir /home/tamesi
# useradd tamesi -d /home/tamesi/./
# passwd tamesi
# chown tamesi.tamesi /home/tamesi |
|
次に、OpenSSH にchroot 用のパッチをあてます。
こちらより、自分が使用しているバージョンのPatchをダウンロードしてきます。なお、初めてインストールする方は、
openssh-***-chroot.tar.gz をダウンロードしてインストールしてください(
インストール方法はこちら)。ここでは、osshChroot-3.7.1p2.diffをダウンロードして使用していきます。OpenSSH
を展開したディレクトリ内にこのファイルをコピーし、以下のようにコマンドを実行します。
# cd /usr/local/src/openssh-3.7.1p2
# patch -p1 < osshChroot-3.7.1p2.diff
patching file session.c |
|
OpenSSH を再起動します。
# ps aux | grep sshd
root 20587 0.0 0.3 2548 804 ? S 19:56
0:00 /usr/local/sbin/sshd
# kill 20587
# /usr/local/sbin/sshd |
|
ここまでの操作で手順2まで終了したことになります。この時点で、WinSCPを使ってサーバーにログインしてみましょう。なお、言うまでもありませんが、プレーン認証を行ってログインする場合には、sshd_config
でPasswordAuthentication の値がyes になっていることを確認してください。
この時点でおそらく以下図のようなエラーが発生し、接続が出来なかったと思います。これは、/home/tamesi/./の下にbash
が存在しないためです。なので以降の操作で必要なものを全てコピーします。
まず、
こちらのサイトから、シェルスクリプトをダウンロードしてきてください。ダウンロード後、各自の環境に合わせていくつか編集する必要があります。筆者の環境では、以下赤文字のssh
のパスを変更しました。
APPS="/bin/bash
/bin/ls /bin/mkdir /bin/mv /bin/pwd /bin/rm
/usr/bin/id /usr/bin/rsync /usr/local/bin/ssh
/bin/ping" |
|
編集し終えたら、スクリプトを実行します。tamesi の部分はユーザー名を記述してください。
# perl create_chroot_env
tamesi |
|
ここまでの操作を終えたら、さっそく、WinSCP で接続してみましょう。今度は、自分のホームディレクトリ上位の階層にはアクセスできないようになっています。なお、接続時に以下のようなエラーメッセージが表示されますが無視して問題ありません。