私が自宅のサーバにchrootsshを導入した時のメモです。
9月20日頃、opensshのセキュリティホールに対応済みのchrootsshを導入しました。
最新版は、3.7p1です。(2003-09-27現在)
chrootsshとは、FTPでのchrootを、sshで使えるようにしているもので、それ単体で
通常のopensshと同様の機能とディレクトリのアクセス制限の機能を提供します。
※導入したサーバー環境はRed Hat Linux 8.0です。
今回、chrootsshを導入するにあたって、以下のサイトを参考にしました。
1) Howto : configure openssh with the chroot patch
http://mail.incredimail.com/howto/openssh/
2) FreeBSDでChroot patch for ssh
http://nadmin.org/howto/chrooted-ssh.html
http://chrootssh.sourceforge.net/
からソースをダウンロードします。
参考サイトの両方とも、標準のopensshにパッチを当てるインストール方法が記述さ
れていますが、ここからダウンロードしたソースは修正済みのsshのようです。
パッチを当てる必要はないようです。
ダウンロードしたソースを展開してインストールします。
私はすでにrpmでopensshを導入していましたので、重複を避けるために、
/usr/local/ssh以下にインストールすることにしました。
# tar zxvf openssh-3.6.1p1-chroot.tar.gz # cd openssh-3.6.1p1 # ./configure --prefix=/usr/local/ssh # make # make install
ここまでの段階では特にエラーはでませんでした。
バイナリや設定ファイルの場所は、それぞれ指定できます。
詳しくは、INSTALLファイルを読んで下さい。
initファイルをコピーします。
# cp contrib/redhat/sshd.init /etc/init.d/chrootsshd
すでに導入しているsshとの重複を避けるために、ファイル名をchrootsshdとしました。
ここですぐにサービスを起動せずに、initファイルの中身を確認します。
起動ファイル内のパスとインストールしたパスが異なると起動ができないからです。
変更した場所は以下の通りです。
#上の方にあるパスの設定部分 #KEYGEN=/usr/bin/ssh-keygen KEYGEN=/usr/local/ssh/bin/ssh-keygen #SSHD=/usr/sbin/sshd SSHD=/usr/local/ssh/sbin/sshd #RSA1_KEY=/etc/ssh/ssh_host_key RSA1_KEY=/usr/local/ssh/etc/ssh_host_key #RSA_KEY=/etc/ssh/ssh_host_rsa_key RSA_KEY=/usr/local/ssh/etc/ssh_host_rsa_key #DSA_KEY=/etc/ssh/ssh_host_dsa_key DSA_KEY=/usr/local/ssh/etc/ssh_host_dsa_key #PID_FILE=/var/run/sshd.pid PID_FILE=/var/run/chrootsshd.pid
# 各関数(start,stopなど)の中に
# ロックファイルのパスが記述されているところ #[ "$RETVAL" = 0 ] && touch /var/lock/subsys/sshd [ "$RETVAL" = 0 ] && touch /var/lock/subsys/chrootsshd
修正を終えたら起動してみます。
# /etc/init.d/chrootsshd start
ここで特にエラーがでなければ起動していると思います。
起動を確認したらサービスに追加します。
# chkconfig --add chrootsshd
これでサービスの起動は可能になっていると思いますが、
sshdの細かい設定はきちんと行う必要があります。
設定の方法は、標準のopensshと同じです。
chrootしてディレクトリのアクセスを制限するユーザの設定を行います。
新規にユーザを作成する場合は以下のように行います。
# mkdir /home/user1 # useradd user1 -d /home/user1/./ # passwd user1 # chown user1:user1 /home/user1 # chmod 700 /home/user1
useraddをするときに、ホームディレクトリが存在しないと追加できなかったので、
先にディレクトリを作成してからuseraddを実行しました。
そのままでは、権限などがrootのままなので、chownとchmodをしました。
これでuser1がchrootするユーザとして追加されました。
./を末尾に付けているユーザのアクセスが制限されるそうです。
次に、このままでは接続ができないので、
接続に最低限必要なファイルを、
/home/user1以下にコピーします。
実際のルートからのパスと、
/home/user1以下の構造が一致するようにした方が無難だと思います。
# mkdir /home/user1/bin # cp /bin/sh /home/user1/bin/sh
私がコピーしたファイルは以下の通りです。
/bin/bash /bin/chgrp /bin/chmod /bin/chown /bin/cp /bin/groups /bin/ls /bin/mkdir /bin/mv /bin/ping /bin/pwd /bin/rm /bin/scp /bin/sh /bin/ssh /etc/group /etc/passwd /lib/ld-linux.so.2 /lib/libacl.so.1 /lib/libattr.so.1 /lib/libcrypt.so.1 /lib/libcrypto.so.2 /lib/libdl.so.2 /lib/libnsl.so.1 /lib/libnss_compat.so.2 /lib/libnss_files.so.2 /lib/libresolv.so.2 /lib/libtermcap.so.2 /lib/libutil.so.1 /lib/i686/libc.so.6 /usr/bin/groups /usr/bin/id /usr/bin/rsync /usr/lib/libpopt.so.0 /usr/lib/libz.so.1 /usr/local/libexec /usr/local/libexec/sftp-server
実際には必要の無いファイルがあると思いますが、
細かくテストする時間がないので、そのままにしています。
大まかな設定は以上です。
sshやWinSCPなどで接続して、きちんとアクセスが制限されていたら成功です。