2011年5月26日木曜日

opensshでchroot

同僚が以下のようなことをやりたいらしい。

  • サーバへのアップロードをsftpかscpかでやりたい
  • アップロードで使うユーザはシェルでのログインを許可したくない
  • アップロードで使うユーザは、自身のホーム以外に移動させたくない


そもそも、sftpとscpは何が違うのかという点は、ここが詳しい。
(同僚曰く、scpよりsftpが早いと言っていたが、この記事を読む限り、scpが高速のようでな。。。)
機能的にはsftpが充実してるようなので、sftpがいいではないかと。

この要件をまとめると、sftpでchrootを使うようにしたいということになるだろうか。
とりあえず、試してみる。
試した環境は、"CentOS release 5.5 (Final) "、64bit版。


インストール

こちらによると、opensshの4.9以降がchrootに対応しているとのことだが、CentOSの標準パッケージだと、これ以前のバージョンが入っているので、入れ替える必要がある。
ソースコンパイルで入れればよいのだが、他のサーバへ横展開することも考えて、rpmを作ってみた。

opensshのソースコードを入手
ここあたりから、ダウンロードして、/usr/src/redhat/SOURCESへ置く。

展開
#cd /usr/src/redhat/SOURCEStar zxvf openssh-5.8p2.tar.gz
x11-ssh-askpassを入手
ここからダウンロードして、/usr/src/redhat/SOURCESへ置く。

必要パッケージのインストール
今回試した環境の場合、以下のものが必要だった

yum install libX11-devel.x86_64
yum install pam-devel.i386
yum install libXt-devel-1.0.2-3.2.el5.x86_64
yum install gtk2-devel

rpmの生成
rpmbuild -bb openssh-5.8p2/contrib/redhat/openssh.spec

/usr/src/redhat/RPMS/x86_64の下にrpmファイルが生成されるはず。

# cd /usr/src/redhat/RPMS/x86_64
# ls 
openssh-5.8p2-1.x86_64.rpm                openssh-clients-5.8p2-1.x86_64.rpm    
openssh-askpass-5.8p2-1.x86_64.rpm        openssh-debuginfo-5.8p2-1.x86_64.rpm
openssh-askpass-gnome-5.8p2-1.x86_64.rpm  openssh-server-5.8p2-1.x86_64.rpm


生成したrpmでアップデートする


#rpm -Uvh openssh-5.8p2-1 openssh-clients-5.8p2-1 openssh-askpass-5.8p2-1 openssh-server-5.8p2-1

sshデーモンを再起動

#/etc/init.d/sshd stop
#/etc/init.d/sshd start



設定

chrootディレクトリの作成
chrootディレクトリはrootが所有者でかつ、パーミションは711でないと駄目っぽい。
今回は、webサーバへのアップロードを前提とするので、/var/www/htmlをchrootとする。


# ls -l /var/www/
合計 32
drwxr-xr-x 2 root root 4096  8月 31  2010 cgi-bin
drwxr-xr-x 3 root root 4096  2月  2 17:25 error
drwxr-xr-x 3 root root 4096  5月 26 11:35 html
drwxr-xr-x 3 root root 4096  2月  2 17:25 icons


アップロードユーザのホームディレクトリの作成
 chrootの下に作る。/var/www/html/user1みたいな感じ

アップロードユーザのグループを作る

#groupadd sftponly

アップロードユーザを作る(chrootからのパスを書くんで、ホームdirは/user1ですね。)

#useradd -d /user1 -s /sbin/nologin -M user1

ホームディレクトリの所有者を変更

#chown -R user1:sftponly /var/www/html/user1
/etc/ssh/sshd_configを以下のように編集

# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
Match Group sftponly
        X11Forwarding no
        AllowTcpForwarding no
        AllowAgentForwarding no
        ChrootDirectory /var/www/html
sshdを再起動して完成。

参考にさせてもらったコンテンツ。多謝

http://www.atmarkit.co.jp/fnetwork/rensai/tcp28/01.html
http://d.hatena.ne.jp/hogem/20100122/1264169759
http://ja.528p.com/linux/centos/SE005-chrootssh.html
http://www.unixuser.org/~euske/doc/openssh/book/chap2.html
http://ameblo.jp/marusa99/entry-10049685241.html
http://d.hatena.ne.jp/f99aq/20090802/1249222491











0 件のコメント:

コメントを投稿