簡単お手軽に FTP サーバーを公開する(sftp, chroot の利用)

開発案件などにおいて、効率的な作業を行う目的で、自社(または個人)で所有するサーバーの一部の領域を第三者に公開(一時的に開放)したいケースがあったりします。

例えば、

そこまで頻繁に発生する事案でない場合、それだけのために FTP サーバーをセットアップするのも手間かと思います。

今回 sftp と chroot を利用して、簡単お手軽にパートナーさん等に公開するサーバー領域を確保できたので、その時のメモになります。

用語の確認

sftp とは?(ついでに ftps との違いも)

SFTPSSH File Transfer Protocol(略称:SFTP)とは、SSHの仕組みを使用しコンピューター間でファイルを安全に転送するプロトコルである。 sftpは、このプロトコルを利用するコマンドの名前である。 OpenSSHには、sftpコマンドがサブシステムとして含まれる。by Wikipedia
FTPSFTPS (File Transfer Protocol over SSL/TLS) は、FTPで送受信するデータをSSLまたはTLSで暗号化するプロトコル。 IETFにより、RFC 2228やRFC 4217で標準化されている。 通常のWell-known Portは、990/tcp。by Wikipedia

chroot とは?

chrootアクセスした領域以外への移動を禁止します。つまりアクセスして来たユーザーをある領域内に閉じ込めてしまいます。

今回は、sftp での接続を目的としますが、純粋な ssh で接続させることも可能です。
その場合、コマンドやライブラリ(lib64など)を予め用意(コピー)する必要があります。
情報が必要な方はググッてみてください。

今回の環境

OSCentOS 6.5
opensshOpenSSH_5.3p1

方針

作業メモ

root になる

% sudo su

LINUX ユーザーとグループの作成

# groupadd sftp-user01 -g 20001
# useradd -g 20001 -s /sbin/nologin -u 20001 -d /home/chroot/sftp-user01 sftp-user01
# passwd sftp-user01(パスワード認証の場合)
重要

ChrootDirectory先のディレクトリ(/home/chroot/sftp-user01)の所有者は「root」、パーミッションは「755」にしておく

# ls -l /home/chroot
drwxr-xr-x  4 root    root    4096 11月 19 16:11 2018 sftp-user01

公開ディレクトリの作成(htdocs)

# cd /home/chroot/sftp-user01
# mkdir htdocs
# chown sftp-user01:sftp-user01 htdocs

sshd_config の設定

# vi /etc/ssh/sshd_config
# override default of no subsystems
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

Match User sftp-*
    ChrootDirectory ~
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp

sshd 再起動

# /etc/init.d/sshd restart

接続確認