今までFTPでファイル転送を行って頂いていたのだけれども、
暗号化せずのやり取りだし、SFTPをやってみる事にした。
以下はCentOS5.5でやった時の備忘録
まずSFTPはOpenSSHを利用して、SSHの接続として処理される。
のでSSHでログインしないユーザ、SFTPのみの利用のユーザを設定し、
特定ディレクトリより上位にいけないようにCHROOT化の設定をした。
1. SFTP専用ユーザグループの作成
特定ディレクトリ"hoge"にアクセスするSSH専用ユーザのグループ“hoge”を追加し、
ログインシェルのないユーザをそのグループに所属させる。
これにより、SSHでのコンソールログインを抑制する。
# grouadd hoge
# useradd ユーザ名 -g hoge -s /sbin/nologin -M
2.OpenSSHのインストール
CentOS5.5の標準でインストールされるOpenssh4.3と古いので
OpenSSH をソースからダウンロード(4.4以降にchrootの機能がサポートされる)
# cd /usr/local/src
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-5.3p1.tar.gz
# tar xvzf openssh-5.3p1.tar.gz
# cd openssh-5.3p1
# ./configure --sysconfdir=/etc/ssh
# make
# yum erase openssh
# make install
# cp contrib/redhat/sshd.init /etc/init.d/sshd
3.起動スクリプトの編集(/etc/init.d/sshd)
ソースからインストールしたスクリプトではパスが異なるなど問題があるので
以下を修正。
KEYGEN=/usr/local/bin/ssh-keygen
SSHD=/usr/local/sbin/sshd
$SSHD $OPTIONS && success || failure
またyumからの削除により、chkconfigから削除されているので、
手動で再度追加。
chkconfig --add sshd
chkconfig --level sshd
SSHDのサービスを起動して正常動作を確認する。
/etc/init.d/sshd start
4. SFTP専用ユーザのCHROOT化設定 (/var/www/html/hoge)
SFTP専用ユーザのグループ“hoge”を指定して、“/var/www/html/hoge”へCHROOT化する。
/etc/ssh/sshd_configを以下のように修正。
・書き換え
Subsystem sftp /usr/libexec/openssh/sftp-server
⇒
Subsystem sftp internal-sftp
・追加
Match Group hoge
ChrootDirectory /var/www/html
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
※/hoge配下のディレクトリは自由に作成したいとの依頼があったため、
chroot化したのは/hogeより上位の階層とした。
(/hogeをchrootすると、root以外がディレクトリを作成できないため)
上記設定変更後にSSHDのサービスを再起動する。
/etc/init.d/sshd restart
さらにCHROOTするフォルダのオーナーをrootにし、パーミッションを755にする。
chown root:root /var/www/html
chmod 755 /var/www/html
そしてCHROOTしたフォルダ配下のディレクトリにSFTP専用ユーザグループの
書き込み権限を与える。
cd /var/www/html/
chown -R ユーザ名:hoge *
chmod -R 775 *
大筋でこんな感じ。