- サーバへのアップロードを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.gzx11-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
参考にさせてもらったコンテンツ。多謝
#/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 subsystemssshdを再起動して完成。
#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
参考にさせてもらったコンテンツ。多謝
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 件のコメント:
コメントを投稿