LoginSignup
2
1

More than 3 years have passed since last update.

Pure-FTPd + Ubuntu 18.04 でFTPサーバを建てる

Last updated at Posted at 2019-09-01

TL;DR

  • /etc/pure-ftpd/pure-ftpd.confは罠
  • 設定はsudo tee /etc/pure-ftpd/pure-ftpd.conf/(項目名) <<< (設定値)
  • 本記事では最低限+αの設定方法しか述べません

きっかけ

  • GCEでf1-microのインスタンス作って最低限の設定でFTPサーバを立てたかった
  • 有名な競合ソフトのvsftpdはFTPSで繋ぐとユーザ認証完了直後の挙動がおかしいのでパス

インストール

お茶の子さいさい、ここで迷うことはないでしょう

sudo apt install -y pure-ftpd

Pure-FTPdの設定

ここが地味に地雷原です。TL;DRにも書きましたが、設定ファイルに思われる/etc/pure-ftpd/pure-ftpd.confはただのハリボテです。これを変更しても、systemdで(すなわちサーバ起動時に)起動するPure-FTPdのデーモンには設定が反映されません。どう設定すれば反映されるのでしょうか。

反映させるには、/etc/pure-ftpd/confの中に設定項目の名前で、設定値を内容としたファイルを作ることが必要です。それでは、私が既定値から変更した設定内容と、その理由を紹介していきます。また、以下のコマンドは、予めcd /etc/pure-ftpd/confした後で実行したものです。

なお、インストール時の初期設定は、以下の通りになっています。

MinUID = 1000
UnixAuthentication = no
NoAnonymous = yes
FSCharset = UTF-8
AltLog = clf:/var/log/pure-ftpd/transfer.log
PAMAuthentication = yes
PureDB = /etc/pure-ftpd/pureftpd.pdb
TLSCipherSuite = HIGH

FTPS関連

sudo tee TLS <<< 3
sudo tee TLSCipherSuite <<< AESGCM+TLSv1.3:AESGCM+ECDHE+TLSv1.2

TLS = 3は、FTPSをサポートしないクライアントからの接続を切ります。Ubuntuには自動発行されたオレオレ証明書(後述)がありますし、ドメインを予め取っておけば、Let's Encryptの証明書がタダで取れます。オレオレ証明書でも、検証目的程度ならば、FTPクライアント次第ではどうにかなります。なお、TLS = 1にすると、TLSなしのFTPでのログインも許可します。

TLSCipherSuiteは、デフォルトがHIGHという高セキュリティを謳いながらセキュリティ的に微妙な暗号スイートを含む設定値を使いたくなかった・今どきTLS1.2に対応していないクライアントはおかしいのが変更理由です。

PASVモード関連

sudo tee PassivePortRange <<< '60000 60099'
sudo tee MaxClientsNumber <<< 50

50台の分ポートを確保しました。検証目的ならば、もっとポート数を減らしてもよいでしょう。(例: 60000~60009)
ポート範囲は、明示的に指定してファイアウォールの設定難度下げ・FW開放ポート数を減らすことによるセキュリティ向上を狙いました。

セキュリティ関連

以下はユーザ自身のホームディレクトリ以外のディレクトリにアクセスすることを許可する場合のみ設定してください。

sudo tee ChrootEveryone <<< no

TLS証明書の設定

TLS証明書・秘密鍵ファイルへの既定のパスは、/etc/ssl/private/pure-ftpd.pemにハードコーディングされています。オレオレ証明書を使用する場合、

sudo cat /etc/ssl/private/ssl-cert-snakeoil.key /etc/ssl/certs/ssl-cert-snakeoil.pem | sudo tee /etc/ssl/private/pure-ftpd.pem

で一発です。きちんとした証明書を使う場合は、秘密鍵→証明書の順番でcatします。証明書のパスを変更する場合、以下の設定のどちらかが必要です。

sudo tee CertFileAndKey <<< "(証明書単独) (秘密鍵)"
sudo tee CertFile <<< (合体済証明書)

ファイアウォールを開ける

PassivePortRangeで指定した範囲のポート・21番ポートを開けてください。以下はUFWを使う場合の設定です。

sudo ufw allow ftp
sudo ufw allow 60000:60099/tcp

FTPユーザの作成

GCEなどを利用するなど、常用しているユーザにパスワードがない場合に必要です。

sudo useradd (ユーザ名)
sudo passwd (ユーザ名)

接続ユーザを制限するなど、さらなるセキュリティを求める場合は、LDAPを使用する・仮想ユーザを作るなどしてください。本記事では解説しません。

Pure-FTPdの設定反映

sudo systemctl restart pure-ftpd

起動確認

ss -ltn
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1