vsFTPdとは
vsFTPd (very secure FTP deamon) とは、セキュリティーに重点を置いたFTPサーバープログラムです。Arch Linuxを含め多くのLinuxディストリビューションでサポートされており、簡単にインストールできます。
ここでは、vsFTPdのインストールから、chrootの設定やTLSの有効化、パッシブモードの設定などをしていきます。
FTPユーザーの追加
FTPサーバーに接続するための、専用ユーザーを追加しておくことはよいマナーです。ということで、まずはFTP接続専用ユーザーを追加して、ftpグループに加えておきます。
$ sudo useradd -m ftp_user
$ sudo passwd ftp_user
$ sudo usermod -aG ftp ftp_user
ここではFTP接続専用ユーザーとして、ftp_userを追加しました。
vsFTPdをインストール
Arch Linuxでは、vsFTPdは標準リポジトリに入っているので、インストールは以下のコマンド一発で完了します。
$ sudo pacman -S vsftpd
基本的な設定
まずは、基本的な設定をしていきます。
/etc/vsftpd.confを編集します。
annonymous_enable=NO
local_enable=YES
write_enable=YES
use_localtime=YES
アクセスを許可するユーザーを設定
まず、/etc/vsftpd.confに以下を追記します。
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
つぎに、/etc/vsftpd/user_listにアクセスを許可するユーザー名を列挙します。
ftp_user
これで、ftp_userがFTPサーバーにアクセスできるようになります。
chrootの設定
chrootをするためには、まず以下の設定を/etc/vsftpd.confに加えます。
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/user_config.d
つぎに、/etc/vsftpd/chroot_listファイルにchrootするユーザー名を列挙します。
ftp_user
さらに、/etc/vsftpd/user_config.d/の中に、chrootするユーザー名と同じ名前のファイルを作成し、そこにそのユーザー固有の設定を書き加えます。
local_root=/srv/http/www.example.com/
write_enable=YES
これで、ftp_userは/srv/http/www.example.com/ ディレクトリをローカルルートとして、書き込み可能な状態でchrootされるようになります。
TLSの有効化
TLSを有効化するためには、以下の設定を/etc/vsftpd.confに加えます。
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH
rsa_cert_file=/etc/letsencrypt/live/www.example.com/fullchain.pem
rsa_private_key_file=/etc/letsencrypt/live/www.example.com/privkey.pem
ここでは、認証にLet's Encryptを使用する場合の例を挙げています。
パッシブモードの有効化
アクティブモードとパッシブモード
FTP接続にはアクティブモードとパッシブモードの二種類があります。
アクティブモードでは、FTPサーバーは標準で21番ポートを使用して通信を行います。このとき、FTPクライアント側も21番ポートを使ってデータのやり取りをするため、クライアント側も21番ポートを解放してある必要があります。
一方でパッシブモードでは、データのやり取りにはサーバー側であらかじめ定められた仮想ポートを使います。クライアント側は21番ポートを解放する必要はありません。
現在では、セキュリティー上の観点からもパッシブモードが主に使われています。
パッシブモードの有効化
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=myhost.example.com
pasv_min_port=60000
pasv_max_port=60100
myhost.example.comは自身のサーバーのドメイン名に読み替えてください。
ここでは、60000番から60100番までのポートをパッシブモードの通信用のポートとして使用するように設定しています。
ポートの解放
vsFTPdが外部と通信できるように、ファイアーウォールのポートを解放します。
$ sudo ufw allow 21/tcp
$ sudo ufw allow 60000:60100/tcp
ここでは、先に指定したものと同じ60000番から60100番までのポートを解放します。
上記では、ファイアーウォールはUFWを使用していることを想定しています。他のファイアーウォールを使っている場合も、基本的にやることは同じです。
vsFTPdの開始
$ sudo systemctl start vsftpd
$ sudo systemctl enable vsftpd
これで、vsFTPdのセットアップは完了です。
まとめ
今回は、vsFTPdを使ってFTPサーバーを構築する手順をまとめてみました。参考にしていただければ幸いです。