̃Gg[͂ĂȃubN}[Nɒlj

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



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

例えば、

  • デザイナーさんに作品データや HTML 一式をアップロードしてもらい、ブラウザで確認できる状態を作ってもらう
  • パートナーさんに WordPress の構築を代行してもらいたい
  • パートナーさんに仮納品の場所として提供したい
  • etc …

そこまで頻繁に発生する事案でない場合、それだけのために 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
  • SFTP は暗号化とプロトコルが SSH ベースであり、FTPS は暗号化が SSL/TLS ベースである という理解で問題なさそうです。
  • また、括りとしては、SFTP は SSH のサブシステム、FTPS は FTP を SSL でラップしたプロトコル という感じでしょうか。

chroot とは?

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

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

今回の環境

OSCentOS 6.5
opensshOpenSSH_5.3p1

方針

  • sftp ユーザーのプレフィクスを「sftp-」とします。
    • プレフィクスを決めておくと、設定で「sftp-*」のようにワイルドカードが利用でき、一元管理できるので便利です。
    • また、プレフィクスを見ただけで、正規の UNIX ユーザーでないとすぐに判断できます。
  • ユーザーを閉じ込めるためのルートディレクトリを「/home/chroot/」とします。
    • 今回 chroot としていますが、何でもよく、用途に合わせて適宜変更してください。
    • また、/home 配下である必要もありません。
  • ユーザーに開放するディレクトリを「/home/chroot/<SFTP-USER>/htdocs」とします。
    • ブラウザからアクセスさせるためには、上位階層のパーミッションを 755 などにする必要があるかもしれません(未確認)

作業メモ

root になる

% sudo su

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

  • ユーザー:sftp-user01(id: 20001)
  • グループ:sftp-user01(id: 20001)
    • 今回は上記としていますが、適宜変更してください。
# groupadd sftp-user01 -g 20001
# useradd -g 20001 -s /sbin/nologin -u 20001 -d /home/chroot/sftp-user01 sftp-user01
# passwd sftp-user01(パスワード認証の場合)
  • 今回は鍵認証でアクセスさせるため、パスワードを設定しませんでした。
  • パスワード認証の場合は passwd コマンドでパスワードを設定してください。

公開ディレクトリの作成(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
  • ※ 必ず、Match User … より上に Subsystem を書いてください。

sshd 再起動

# /etc/init.d/sshd restart

接続確認

  • sftp プロトコルに対応したクライアントアプリケーションで接続を試してください。
  • → Cyberduck(Mac)、WinSCP(Win)、FileZilla(Mac, Win)など
    • htdoc 配下で、ファイルやディレクトリの作成、リネーム、削除、パーミッションの変更などが出来ることも確認します。
    • chroot の効果(上位ディレクトリへの移動ができないこと)も確認します。





unix/general/sftp_chroot.txt